<!DOCTYPE html>
<!-- saved from url=(0016)http://localhost -->
<html>
  <head>
    <meta charset="utf-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=edge"/>
    <title>数据安全全生命周期</title>
    <style>
        body{
            margin: 0;
        }
        #content-info{
            width: auto;
            margin: 0 auto;
            text-align: center;
        }
        #author-info{
            white-space: nowrap;
            text-overflow: ellipsis;
            overflow: hidden;
        }
        #title{
            text-overflow: ellipsis;
            white-space: nowrap;
            overflow: hidden;
            padding-top: 10px;
            margin-bottom: 2px;
            font-size: 34px;
            color: #505050;
        }
        .text{
            white-space:nowrap;
            text-overflow: ellipsis;
            display: inline-block;
            margin-right: 20px;
            margin-bottom: 2px;
            font-size: 20px;
            color: #8c8c8c;
        }
        #navBar{
            width: auto;
            height: auto;
            position: fixed;
            right:0;
            bottom: 0;
            background-color: #f0f3f4;
            overflow-y: auto;
            text-align: center;
        }
        #svg-container{
            width: 100%;
            overflow-x: scroll;
            min-width: 0px;
            margin: 0 10px;
        }
        #nav-thumbs{
            overflow-y: scroll;
            padding: 0 5px;
        }
        .nav-thumb{
            position: relative;
            margin: 10px auto;
        }
        .nav-thumb >p{
            text-align: center;
            font-size: 12px;
            margin: 4px 0 0 0;
        }
        .nav-thumb >div{
            position: relative;
            display: inline-block;
            border: 1px solid #c6cfd5;
        }
        .nav-thumb img{
            display: block;
        }
        #main-content{
            bottom: 0;
            left: 0;
            right: 0;
            background-color: #d0cfd8;
            display: flex;
            height: auto;
            flex-flow: row wrap;
            text-align:center;
        }
        #svg-container >svg{
            display: block;
            margin:10px auto;
            margin-bottom: 0;
        }
        #copyright{
            bottom: 0;
            left: 50%;
            margin: 5px auto;
            font-size: 16px;
            color: #515151;
        }
        #copyright >a{
            text-decoration: none;
            color: #77C;
        }
        .number{
            position: absolute;
            top:0;
            left:0;
            border-top:22px solid #08a1ef;
            border-right: 22px solid transparent;
        }
        .pagenum{
            font-size: 12px;
            color: #fff;
            position: absolute;
            top: -23px;
            left: 2px;
        }
            #navBar::-webkit-scrollbar{
            width: 8px;
            background-color: #f5f5f5;
        }
            #navBar::-webkit-scrollbar-track{
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            border-radius: 8px;
            background-color: #fff;
        }
            #navBar::-webkit-scrollbar-thumb{
            border-radius: 8px;
            -webkit-box-shadow: inset 0 0 4px rgba(0,0,0,.3);
            background-color: #6b6b70;
        }
        #navBar::-webkit-scrollbar-thumb:hover{
            background-color: #4a4a4f;
        }
</style>
  </head>
  <body>
    <div id="main-area">
      <div id="content-info">
        <div id="content-info">
          <div id="title">数据安全全生命周期</div>
        </div>
        <div id="author-info">
          <div class="text" id="author-name">yuguanc</div>
          <div class="text" id="share-time">2018-06-14</div>
        </div>
      </div>
      <div id="main-content">
        <div id="svg-container"><svg ed:hSpacing="30" ed:vSpacing="30" preserveAspectRadio="xMinYMin meet" xmlns="http://www.w3.org/2000/svg" xmlns:ev="http://www.w3.org/2001/xml-events" xmlns:xlink="http://www.w3.org/1999/xlink" ed:name="Page-1" xmlns:ed="http://www.edrawsoft.cn/xml/2017/SVGExtensions/" viewBox="0 0 2142 2737" height="2737" id="page1" width="2142">
    <style type="text/css"><![CDATA[
g[ed\:togtopicid],g[ed\:hyperlink],g[ed\:comment],g[ed\:note] {cursor:pointer;}
g[id] {-moz-user-select: none;-ms-user-select: none;user-select: none;}
svg text::selection,svg tspan::selection{background-color: #4285f4;color: #ffffff;fill: #ffffff;}
.st2 {fill:#303030;font-family:宋体;font-size:10pt}
.st1 {fill:#303030;font-family:宋体;font-size:12pt}
.st3 {fill:#303030;font-family:宋体;font-size:14pt}
]]></style>
    <defs>
        <linearGradient x2="0%" y1="0%" y2="100%" id="lg1" x1="0%">
            <stop stop-color="#ffffff" offset="0"/>
            <stop stop-color="#f0f5f0" offset="0.25"/>
            <stop stop-color="#e1ebe1" offset="0.75"/>
            <stop stop-color="#c8d7c8" offset="1"/>
        </linearGradient>
    </defs>
    <rect y="0" x="0" height="2737" fill="#ffffff" width="2142"/>
    <path ed:idlist="140,142" ed:parentid="140,142" transform="translate(687,858.9)" ed:type="summary" stroke="#4486b1" stroke-linejoin="round" d="M0.1,0C6,0,5.9,3.1,5.9,3.1L5.9,22.2C5.9,22.2,6.9,24.9,12,24.9C6.9,25,5.9,27.5,5.9,27.5L5.9,46.6C5.9,46.6,5.8,49.7,0,49.7" fill="none" id="244"/>
    <path ed:idlist="134,130,132" ed:parentid="130,132,134" transform="translate(769,508.5)" ed:type="summary" stroke="#4486b1" stroke-linejoin="round" d="M0.1,0C6,0,5.9,5,5.9,5L5.9,35.2C5.9,35.2,6.9,39.5,12,39.5C6.9,39.6,5.9,43.7,5.9,43.7L5.9,73.9C5.9,73.9,5.8,78.9,0,78.9" fill="none" id="268"/>
    <path ed:idlist="146,148" ed:parentid="146,148" transform="translate(668,1012)" ed:type="summary" stroke="#4486b1" stroke-linejoin="round" d="M0.1,0C6,0,5.9,3.1,5.9,3.1L5.9,22.2C5.9,22.2,6.9,24.9,12,24.9C6.9,25,5.9,27.5,5.9,27.5L5.9,46.6C5.9,46.6,5.8,49.7,0,49.7" fill="none" id="274"/>
    <path ed:idlist="158,160" ed:parentid="158,160" transform="translate(702,1325.7)" ed:type="summary" stroke="#4486b1" stroke-linejoin="round" d="M0.1,0C6,0,5.9,3.1,5.9,3.1L5.9,22.2C5.9,22.2,6.9,24.9,12,24.9C6.9,25,5.9,27.5,5.9,27.5L5.9,46.6C5.9,46.6,5.8,49.7,0,49.7" fill="none" id="312"/>
    <path ed:idlist="206,208" ed:parentid="206,208" transform="translate(822,238.6)" ed:type="summary" stroke="#4486b1" stroke-linejoin="round" d="M0.1,0C6,0,5.9,3.1,5.9,3.1L5.9,22.2C5.9,22.2,6.9,24.9,12,24.9C6.9,25,5.9,27.5,5.9,27.5L5.9,46.6C5.9,46.6,5.8,49.7,0,49.7" fill="none" id="214"/>
    <path ed:idlist="332,334" ed:parentid="332,334" transform="translate(890,1610.2)" ed:type="summary" stroke="#4486b1" stroke-linejoin="round" d="M0.1,0C6,0,5.9,3.1,5.9,3.1L5.9,22.2C5.9,22.2,6.9,24.8,12,24.8C6.9,25,5.9,27.5,5.9,27.5L5.9,46.6C5.9,46.6,5.8,49.7,0,49.7" fill="none" id="344"/>
    <g ed:parentid="101" transform="translate(459,287.25)" ed:width="107" id="102" ed:height="40">
        <path stroke="#4486b1" stroke-linejoin="round" d="M4,0L103,0C105.2,0,107,1.8,107,4L107,36C107,38.2,105.2,40,103,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" fill="#f5f9fe"/>
        <path transform="translate(-92.25,550.72)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-60.1,499.7C13.8,324.8,-73.4,-530.7,92.3,-530.7" fill="none" id="103"/>
        <text class="st1">
            <tspan style="white-space:pre" y="26.5" x="22" textLength="64" lengthAdjust="spacing">数据采集</tspan>
        </text>
    </g>
    <g ed:parentid="101" transform="translate(459,717.75)" ed:width="139" id="104" ed:height="40">
        <path stroke="#4486b1" stroke-linejoin="round" d="M4,0L135,0C137.2,0,139,1.8,139,4L139,36C139,38.2,137.2,40,135,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" fill="#f5f9fe"/>
        <path transform="translate(-92.25,335.47)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-53.1,284.5C7.6,157.6,-64.6,-315.5,92.3,-315.5" fill="none" id="105"/>
        <text class="st1">
            <tspan style="white-space:pre" y="26.5" x="22" textLength="96" lengthAdjust="spacing">前台业务处理</tspan>
        </text>
    </g>
    <g ed:parentid="101" transform="translate(459,1089.85)" ed:width="107" id="106" ed:height="40">
        <path stroke="#4486b1" stroke-linejoin="round" d="M4,0L103,0C105.2,0,107,1.8,107,4L107,36C107,38.2,105.2,40,103,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" fill="#f5f9fe"/>
        <path transform="translate(-92.25,149.42)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-42.7,98.4C0.4,29.7,-4.2,-129.4,92.3,-129.4" fill="none" id="107"/>
        <text class="st1">
            <tspan style="white-space:pre" y="26.5" x="22" textLength="64" lengthAdjust="spacing">数据存储</tspan>
        </text>
    </g>
    <g ed:parentid="101" transform="translate(459,1345.15)" ed:width="123" id="108" ed:height="40">
        <path stroke="#4486b1" stroke-linejoin="round" d="M4,0L119,0C121.2,0,123,1.8,123,4L123,36C123,38.2,121.2,40,119,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" fill="#f5f9fe"/>
        <path transform="translate(-92.25,21.77)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M29.3,-0.7C50.9,-1.3,71.6,-1.8,92.3,-1.8" fill="none" id="109"/>
        <text class="st1">
            <tspan style="white-space:pre" y="26.5" x="22" textLength="80" lengthAdjust="spacing">访问和维护</tspan>
        </text>
    </g>
    <g ed:parentid="101" transform="translate(459,1600.45)" ed:width="139" id="110" ed:height="40">
        <path stroke="#4486b1" stroke-linejoin="round" d="M4,0L135,0C137.2,0,139,1.8,139,4L139,36C139,38.2,137.2,40,135,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" fill="#f5f9fe"/>
        <path transform="translate(-92.25,-105.88)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-42.3,-94.9C0.5,-27.6,-2.4,125.9,92.3,125.9" fill="none" id="111"/>
        <text class="st1">
            <tspan style="white-space:pre" y="26.5" x="22" textLength="96" lengthAdjust="spacing">后台数据分析</tspan>
        </text>
    </g>
    <g ed:parentid="101" transform="translate(459,1957.95)" ed:width="123" id="112" ed:height="40">
        <path stroke="#4486b1" stroke-linejoin="round" d="M4,0L119,0C121.2,0,123,1.8,123,4L123,36C123,38.2,121.2,40,119,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" fill="#f5f9fe"/>
        <path transform="translate(-92.25,-284.63)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-52.7,-273.6C7.1,-149.5,-62.9,304.6,92.3,304.6" fill="none" id="113"/>
        <text class="st1">
            <tspan style="white-space:pre" y="26.5" x="22" textLength="80" lengthAdjust="spacing">展示和使用</tspan>
        </text>
    </g>
    <g ed:parentid="101" transform="translate(459,2344.65)" ed:width="139" id="114" ed:height="40">
        <path stroke="#4486b1" stroke-linejoin="round" d="M4,0L135,0C137.2,0,139,1.8,139,4L139,36C139,38.2,137.2,40,135,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" fill="#f5f9fe"/>
        <path transform="translate(-92.25,-477.97)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-59.3,-467C13.1,-298.7,-72.8,498,92.3,498" fill="none" id="115"/>
        <text class="st1">
            <tspan style="white-space:pre" y="26.5" x="22" textLength="96" lengthAdjust="spacing">共享和再分发</tspan>
        </text>
    </g>
    <g ed:parentid="101" transform="translate(459,2541.55)" ed:width="107" id="116" ed:height="40">
        <path stroke="#4486b1" stroke-linejoin="round" d="M4,0L103,0C105.2,0,107,1.8,107,4L107,36C107,38.2,105.2,40,103,40L4,40C1.8,40,0,38.2,0,36L0,4C0,1.8,1.8,0,4,0z" fill="#f5f9fe"/>
        <path transform="translate(-92.25,-576.42)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-61.6,-565.4C15,-377.9,-74.5,596.4,92.3,596.4" fill="none" id="117"/>
        <text class="st1">
            <tspan style="white-space:pre" y="26.5" x="22" textLength="64" lengthAdjust="spacing">数据销毁</tspan>
        </text>
    </g>
    <g ed:parentid="102" transform="translate(595,209.4)" ed:width="69" id="118" ed:height="20.5">
        <path transform="translate(-14.5,59.18)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,38.7C4.6,38.7,-11.8,-38.7,14.5,-38.7" fill="none" id="119"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L69,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="61" lengthAdjust="spacing">全站https</tspan>
        </text>
    </g>
    <g ed:parentid="102" transform="translate(595,297)" ed:width="85" id="120" ed:height="20.5">
        <path transform="translate(-14.5,15.38)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-5.1C-1.7,-5.1,3,5.1,14.5,5.1" fill="none" id="121"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L85,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="77" lengthAdjust="spacing">Keyless CDN</tspan>
        </text>
    </g>
    <g ed:parentid="102" transform="translate(595,326.2)" ed:width="94" id="122" ed:height="20.5">
        <path transform="translate(-14.5,0.77)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-19.7C1.5,-19.7,-4.5,19.7,14.5,19.7" fill="none" id="123"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L94,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="86" lengthAdjust="spacing">跨IDC自动加密</tspan>
        </text>
    </g>
    <g ed:parentid="102" transform="translate(595,355.4)" ed:width="47" id="124" ed:height="20.5">
        <path transform="translate(-14.5,-13.83)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-34.3C4.1,-34.3,-10.5,34.3,14.5,34.3" fill="none" id="125"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L47,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="39" lengthAdjust="spacing">反爬虫</tspan>
        </text>
    </g>
    <g ed:parentid="102" transform="translate(595,384.6)" ed:width="60" id="126" ed:height="20.5">
        <path transform="translate(-14.5,-28.43)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-48.9C5.5,-48.9,-13.9,48.9,14.5,48.9" fill="none" id="127"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">账号安全</tspan>
        </text>
    </g>
    <g ed:parentid="102" transform="translate(595,428.4)" ed:width="36" id="128" ed:height="20.5">
        <path transform="translate(-14.5,-50.33)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-70.8C5.8,-70.8,-14.5,70.8,14.5,70.8" fill="none" id="129"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L36,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="28" lengthAdjust="spacing">UUID</tspan>
        </text>
    </g>
    <g ed:parentid="104" transform="translate(627,508.5)" ed:width="102" id="130" ed:height="20.5">
        <path transform="translate(-14.5,124.88)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,104.4C5.8,104.4,-14.5,-104.4,14.5,-104.4" fill="none" id="131"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L102,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="94" lengthAdjust="spacing">全程ticket鉴权</tspan>
        </text>
    </g>
    <g ed:parentid="104" transform="translate(627,537.7)" ed:width="137" id="132" ed:height="20.5">
        <path transform="translate(-14.5,110.27)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,89.8C5.8,89.8,-14.5,-89.8,14.5,-89.8" fill="none" id="133"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L137,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="129" lengthAdjust="spacing">用户token&amp;服务token</tspan>
        </text>
    </g>
    <g ed:parentid="104" transform="translate(627,566.9)" ed:width="29" id="134" ed:height="20.5">
        <path transform="translate(-14.5,95.67)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,75.2C5.8,75.2,-14.5,-75.2,14.5,-75.2" fill="none" id="135"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L29,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="21" lengthAdjust="spacing">SSO</tspan>
        </text>
    </g>
    <g ed:parentid="104" transform="translate(627,596.1)" ed:width="60" id="136" ed:height="20.5">
        <path transform="translate(-14.5,81.08)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,60.6C5.8,60.6,-14.5,-60.6,14.5,-60.6" fill="none" id="137"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">可信计算</tspan>
        </text>
    </g>
    <g ed:parentid="104" transform="translate(627,727.5)" ed:width="160" id="138" ed:height="20.5">
        <path transform="translate(-14.5,15.37)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-5.1C-1.7,-5.1,3,5.1,14.5,5.1" fill="none" id="139"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L160,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="152" lengthAdjust="spacing">服务化（访问DB必须API）</tspan>
        </text>
    </g>
    <g ed:parentid="104" transform="translate(627,858.9)" ed:width="55" id="140" ed:height="20.5">
        <path transform="translate(-14.5,-50.33)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-70.8C5.8,-70.8,-14.5,70.8,14.5,70.8" fill="none" id="141"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L55,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="47" lengthAdjust="spacing">RPC鉴权</tspan>
        </text>
    </g>
    <g ed:parentid="104" transform="translate(627,888.1)" ed:width="55" id="142" ed:height="20.5">
        <path transform="translate(-14.5,-64.92)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-85.4C5.8,-85.4,-14.5,85.4,14.5,85.4" fill="none" id="143"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L55,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="47" lengthAdjust="spacing">RPC加密</tspan>
        </text>
    </g>
    <g ed:parentid="104" transform="translate(627,931.9)" ed:width="55" id="144" ed:height="20.5">
        <path transform="translate(-14.5,-86.83)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-107.3C5.8,-107.3,-14.5,107.3,14.5,107.3" fill="none" id="145"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L55,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="47" lengthAdjust="spacing">SQL审计</tspan>
        </text>
    </g>
    <g ed:parentid="106" transform="translate(595,1012)" ed:width="68" id="146" ed:height="20.5">
        <path transform="translate(-14.5,59.17)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,38.7C4.6,38.7,-11.8,-38.7,14.5,-38.7" fill="none" id="147"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L68,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="60" lengthAdjust="spacing">密钥HSM化</tspan>
        </text>
    </g>
    <g ed:parentid="106" transform="translate(595,1041.2)" ed:width="55" id="148" ed:height="20.5">
        <path transform="translate(-14.5,44.58)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,24.1C2.4,24.1,-6.5,-24.1,14.5,-24.1" fill="none" id="149"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L55,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="47" lengthAdjust="spacing">统一KMS</tspan>
        </text>
    </g>
    <g ed:parentid="106" transform="translate(595,1070.4)" ed:width="151" id="150" ed:height="20.5">
        <path transform="translate(-14.5,29.97)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,9.5C-0.7,9.5,0.6,-9.5,14.5,-9.5" fill="none" id="151"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L151,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="143" lengthAdjust="spacing">结构化（静态）数据加密</tspan>
        </text>
    </g>
    <g ed:parentid="106" transform="translate(595,1099.6)" ed:width="90" id="152" ed:height="20.5">
        <path transform="translate(-14.5,15.37)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-5.1C-1.7,-5.1,3,5.1,14.5,5.1" fill="none" id="153"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L90,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="82" lengthAdjust="spacing">per-file加密</tspan>
        </text>
    </g>
    <g ed:parentid="106" transform="translate(595,1158)" ed:width="86" id="154" ed:height="20.5">
        <path transform="translate(-14.5,-13.83)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-34.3C4.1,-34.3,-10.5,34.3,14.5,34.3" fill="none" id="155"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="78" lengthAdjust="spacing">文件系统加密</tspan>
        </text>
    </g>
    <g ed:parentid="108" transform="translate(611,1267.3)" ed:width="73" id="156" ed:height="20.5">
        <path transform="translate(-14.5,59.17)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,38.7C4.6,38.7,-11.8,-38.7,14.5,-38.7" fill="none" id="157"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L73,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="65" lengthAdjust="spacing">运维堡垒机</tspan>
        </text>
    </g>
    <g ed:parentid="108" transform="translate(611,1325.7)" ed:width="69" id="158" ed:height="20.5">
        <path transform="translate(-14.5,29.98)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,9.5C-0.7,9.5,0.6,-9.5,14.5,-9.5" fill="none" id="159"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L69,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="61" lengthAdjust="spacing">Debug脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="108" transform="translate(611,1354.9)" ed:width="86" id="160" ed:height="20.5">
        <path transform="translate(-14.5,15.38)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-5.1C-1.7,-5.1,3,5.1,14.5,5.1" fill="none" id="161"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="78" lengthAdjust="spacing">监控日志脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="108" transform="translate(611,1413.3)" ed:width="81" id="162" ed:height="20.5">
        <path transform="translate(-14.5,-13.83)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-34.3C4.1,-34.3,-10.5,34.3,14.5,34.3" fill="none" id="163"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L81,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="73" lengthAdjust="spacing">RD/运维分离</tspan>
        </text>
    </g>
    <g ed:parentid="108" transform="translate(611,1457.1)" ed:width="99" id="164" ed:height="20.5">
        <path transform="translate(-14.5,-35.73)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-56.2C5.8,-56.2,-14.5,56.2,14.5,56.2" fill="none" id="165"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L99,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="91" lengthAdjust="spacing">生产转测试脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="110" transform="translate(627,1581)" ed:width="60" id="168" ed:height="20.5">
        <path transform="translate(-14.5,29.97)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,9.5C-0.7,9.5,0.6,-9.5,14.5,-9.5" fill="none" id="169"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">数仓安全</tspan>
        </text>
    </g>
    <g ed:parentid="110" transform="translate(627,1668.6)" ed:width="60" id="170" ed:height="20.5">
        <path transform="translate(-14.5,-13.83)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-34.3C4.1,-34.3,-10.5,34.3,14.5,34.3" fill="none" id="171"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">审计大盘</tspan>
        </text>
    </g>
    <g ed:parentid="110" transform="translate(627,1697.8)" ed:width="73" id="172" ed:height="20.5">
        <path transform="translate(-14.5,-28.42)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-48.9C5.5,-48.9,-13.9,48.9,14.5,48.9" fill="none" id="173"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L73,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="65" lengthAdjust="spacing">匿名化算法</tspan>
        </text>
    </g>
    <g ed:parentid="112" transform="translate(611,1777.9)" ed:width="34" id="174" ed:height="20.5">
        <path transform="translate(-14.5,110.28)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,89.8C5.8,89.8,-14.5,-89.8,14.5,-89.8" fill="none" id="175"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="26" lengthAdjust="spacing">水印</tspan>
        </text>
    </g>
    <g ed:parentid="112" transform="translate(611,1850.9)" ed:width="29" id="176" ed:height="20.5">
        <path transform="translate(-14.5,73.78)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,53.3C5.7,53.3,-14.3,-53.3,14.5,-53.3" fill="none" id="177"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L29,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="21" lengthAdjust="spacing">DLP</tspan>
        </text>
    </g>
    <g ed:parentid="112" transform="translate(611,1967.7)" ed:width="208" id="178" ed:height="20.5">
        <path transform="translate(-14.5,15.38)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-5.1C-1.7,-5.1,3,5.1,14.5,5.1" fill="none" id="179"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L208,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="200" lengthAdjust="spacing">beyondCorp模型：“零信任”架构</tspan>
        </text>
    </g>
    <g ed:parentid="112" transform="translate(611,2084.5)" ed:width="60" id="180" ed:height="20.5">
        <path transform="translate(-14.5,-43.03)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-63.5C5.8,-63.5,-14.5,63.5,14.5,63.5" fill="none" id="181"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">展示脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="112" transform="translate(611,2157.5)" ed:width="73" id="182" ed:height="20.5">
        <path transform="translate(-14.5,-79.53)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-100C5.8,-100,-14.5,100,14.5,100" fill="none" id="183"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L73,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="65" lengthAdjust="spacing">数据堡垒机</tspan>
        </text>
    </g>
    <g ed:parentid="114" transform="translate(627,2237.6)" ed:width="60" id="184" ed:height="20.5">
        <path transform="translate(-14.5,73.78)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,53.3C5.7,53.3,-14.3,-53.3,14.5,-53.3" fill="none" id="185"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">隐私声明</tspan>
        </text>
    </g>
    <g ed:parentid="114" transform="translate(627,2266.8)" ed:width="60" id="186" ed:height="20.5">
        <path transform="translate(-14.5,59.18)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,38.7C4.6,38.7,-11.8,-38.7,14.5,-38.7" fill="none" id="187"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">授权审核</tspan>
        </text>
    </g>
    <g ed:parentid="114" transform="translate(627,2296)" ed:width="34" id="188" ed:height="20.5">
        <path transform="translate(-14.5,44.58)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,24.1C2.4,24.1,-6.5,-24.1,14.5,-24.1" fill="none" id="189"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="26" lengthAdjust="spacing">脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="114" transform="translate(627,2354.4)" ed:width="86" id="190" ed:height="20.5">
        <path transform="translate(-14.5,15.38)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-5.1C-1.7,-5.1,3,5.1,14.5,5.1" fill="none" id="191"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L86,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="78" lengthAdjust="spacing">防止下游缓存</tspan>
        </text>
    </g>
    <g ed:parentid="114" transform="translate(627,2412.8)" ed:width="55" id="192" ed:height="20.5">
        <path transform="translate(-14.5,-13.82)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-34.3C4.1,-34.3,-10.5,34.3,14.5,34.3" fill="none" id="193"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L55,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="47" lengthAdjust="spacing">安全SDK</tspan>
        </text>
    </g>
    <g ed:parentid="116" transform="translate(595,2551.3)" ed:width="60" id="194" ed:height="20.5">
        <path transform="translate(-14.5,15.38)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-5.1C-1.7,-5.1,3,5.1,14.5,5.1" fill="none" id="195"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">安全删除</tspan>
        </text>
    </g>
    <g ed:parentid="118" transform="translate(693,151)" ed:width="359" id="196" ed:height="20.5">
        <path transform="translate(-14.5,49.7)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,29.2C3.3,29.2,-8.6,-29.2,14.5,-29.2" fill="none" id="197"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L359,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="351" lengthAdjust="spacing">解决用户到服务器被嗅探、流量镜像、数据第三方掠走等问题</tspan>
        </text>
    </g>
    <g ed:parentid="118" transform="translate(693,180.2)" ed:width="224" id="198" ed:height="20.5">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" fill="none" id="199"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L224,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="216" lengthAdjust="spacing">常见攻击：流量劫持插广告，定向APT</tspan>
        </text>
    </g>
    <g ed:parentid="118" transform="translate(693,209.4)" ed:width="640" id="200" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-0C-2.9,-0,5.8,0,14.5,0" fill="none" id="201"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L640,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="632" lengthAdjust="spacing">注意事项：避免使用HTTPS不安全协议 TSL1.0、SSL3，过时的弱加密算法套件、数据安全证书本身的安全问题</tspan>
        </text>
    </g>
    <g ed:parentid="118" transform="translate(693,253.2)" ed:width="47" id="204" ed:height="20.5">
        <path transform="translate(-14.5,-1.4)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" fill="none" id="205"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L47,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="39" lengthAdjust="spacing">副作用</tspan>
        </text>
    </g>
    <g ed:parentid="204" transform="translate(769,238.6)" ed:width="29" id="206" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="207"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L29,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="21" lengthAdjust="spacing">CDN</tspan>
        </text>
    </g>
    <g ed:parentid="204" transform="translate(769,267.8)" ed:width="48" id="208" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="209"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L48,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="40" lengthAdjust="spacing">高防IP</tspan>
        </text>
    </g>
    <g ed:parentid="214" transform="translate(841,248.95)" ed:layout="rightmap" ed:width="64.72499999999999" id="215" ed:height="29">
        <path stroke="#4486b1" stroke-linejoin="round" d="M14.5,0L43.2,0C47.1,0,52.8,-0.5,57,1.7C61.6,4.1,64.7,8.9,64.7,14.5C64.7,22.5,58.2,29,50.2,29L21.5,29C17.6,29,11.9,29.5,7.8,27.3C3.2,24.9,0,20.1,0,14.5C0,6.5,6.5,0,14.5,0z" fill="#ffffff"/>
        <text class="st2">
            <tspan style="white-space:pre" y="19.5" x="20" textLength="26" lengthAdjust="spacing">说明</tspan>
        </text>
    </g>
    <g ed:parentid="215" transform="translate(934.72,238.6)" ed:width="482" id="216" ed:height="20.5">
        <path transform="translate(-14.5,22.67)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,2.2C-2.4,2.2,4.6,-2.2,14.5,-2.2" fill="none" id="218"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L482,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="474" lengthAdjust="spacing">CDN回源时没有使用加密，即用户浏览器到CDN是加密的，但CDN到IDC源站是明文的</tspan>
        </text>
    </g>
    <g ed:parentid="215" transform="translate(934.72,267.8)" ed:width="176" id="217" ed:height="20.5">
        <path transform="translate(-14.5,8.08)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-12.4C-0,-12.4,-0.9,12.4,14.5,12.4" fill="none" id="219"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L176,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="168" lengthAdjust="spacing">解决方案：Keyless CDN技术</tspan>
        </text>
    </g>
    <g ed:parentid="122" transform="translate(718,326.2)" ed:width="112" id="220" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="221"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="104" lengthAdjust="spacing">广域网流量未加密</tspan>
        </text>
    </g>
    <g ed:parentid="220" transform="translate(859,326.2)" ed:width="487" id="222" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="223"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L487,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="479" lengthAdjust="spacing">IDC间的流量复制和备份同步，对应的解决方案是跨IDC流量自动加密、TLS隧道化。</tspan>
        </text>
    </g>
    <g ed:parentid="128" transform="translate(660,413.8)" ed:width="359" id="224" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="225"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L359,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="351" lengthAdjust="spacing">最大的作用是建立中间映射层，屏蔽与真实用户信息的关系链</tspan>
        </text>
    </g>
    <g ed:parentid="128" transform="translate(660,443)" ed:width="1321" id="226" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="227"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L1321,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="1313" lengthAdjust="spacing">更潜在的意义是屏蔽个体识别数据，因为实名制，手机号越来越能代表个人标识，且一般绑定了各种账号，更改成本很高，找到手机号就能对上这个人，因此理论上但凡带有个体识别数据的信息都需要“转接桥梁”、匿名化和脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="126" transform="translate(684,384.6)" ed:width="652" id="228" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="229"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L652,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="644" lengthAdjust="spacing">只要账号泄露（撞库&amp;爆破）到达一定数量级，把这些账号的数据汇总一下，就必定可以产生批量数据泄露的效果</tspan>
        </text>
    </g>
    <g ed:parentid="124" transform="translate(671,355.4)" ed:width="1029" id="230" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="231"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L1029,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="1021" lengthAdjust="spacing">爬虫的问题存在于一切可通过页面、接口获取数据的场合，大概1小时爬个几百万条数据是一点问题都没有的，对于没有彻底脱敏的数据，爬虫的效果有时候等价于“黑掉”服务器</tspan>
        </text>
    </g>
    <g ed:parentid="120" transform="translate(709,297)" ed:width="263" id="232" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="233"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L263,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="255" lengthAdjust="spacing">无需给出自己的证书就可以实现CDN回源加密</tspan>
        </text>
    </g>
    <g ed:parentid="144" transform="translate(711,917.3)" ed:width="388" id="238" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="239"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L388,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="380" lengthAdjust="spacing">防止SQL注入批量拉取数据，检测API鉴权类漏洞和爬虫的成功访问</tspan>
        </text>
    </g>
    <g ed:parentid="144" transform="translate(711,946.5)" ed:width="550" id="240" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="241"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L550,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="542" lengthAdjust="spacing">内部人员对数据库的操作，要避免某个RD或DBA为了泄愤，把数据库拖走或者删除这种危险动作</tspan>
        </text>
    </g>
    <g ed:parentid="240" transform="translate(1290,946.5)" ed:width="359" id="242" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="243"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L359,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="351" lengthAdjust="spacing">数据库访问层组件，通过这个组件，可以审计、控制危险操作</tspan>
        </text>
    </g>
    <g ed:parentid="244" transform="translate(706,869.25)" ed:layout="rightmap" ed:width="64.72499999999999" id="245" ed:height="29">
        <path stroke="#4486b1" stroke-linejoin="round" d="M14.5,0L43.2,0C47.1,0,52.8,-0.5,57,1.7C61.6,4.1,64.7,8.9,64.7,14.5C64.7,22.5,58.2,29,50.2,29L21.5,29C17.6,29,11.9,29.5,7.8,27.3C3.2,24.9,0,20.1,0,14.5C0,6.5,6.5,0,14.5,0z" fill="#ffffff"/>
        <text class="st2">
            <tspan style="white-space:pre" y="19.5" x="20" textLength="26" lengthAdjust="spacing">说明</tspan>
        </text>
    </g>
    <g ed:parentid="245" transform="translate(799.72,873.5)" ed:width="190" id="246" ed:height="20.5">
        <path transform="translate(-14.5,15.38)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-5.1C-1.7,-5.1,3,5.1,14.5,5.1" fill="none" id="247"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L190,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="182" lengthAdjust="spacing">要求教苛刻，可视情况进行处理</tspan>
        </text>
    </g>
    <g ed:parentid="138" transform="translate(816,625.3)" ed:width="405" id="248" ed:height="20.5">
        <path transform="translate(-14.5,71.6)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,51.1C5.6,51.1,-14.1,-51.1,14.5,-51.1" fill="none" id="249"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L405,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="397" lengthAdjust="spacing">说明:服务化并不能认为是一个安全机制，但安全却是服务化的受益者</tspan>
        </text>
    </g>
    <g ed:parentid="138" transform="translate(816,727.5)" ed:width="163" id="250" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="251"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L163,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="155" lengthAdjust="spacing">Bezos在Amazon推行服务化</tspan>
        </text>
    </g>
    <g ed:parentid="138" transform="translate(816,829.7)" ed:width="634" id="252" ed:height="20.5">
        <path transform="translate(-14.5,-30.6)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-51.1C5.6,-51.1,-14.1,51.1,14.5,51.1" fill="none" id="253"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L634,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="626" lengthAdjust="spacing">安全上的意义:必须通过接口访问数据，屏蔽了各种直接访问数据的途径，有了API控制和审计就会方便很多。</tspan>
        </text>
    </g>
    <g ed:parentid="250" transform="translate(1008,654.5)" ed:width="320" id="254" ed:height="20.5">
        <path transform="translate(-14.5,57)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,36.5C4.4,36.5,-11.2,-36.5,14.5,-36.5" fill="none" id="255"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L320,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="312" lengthAdjust="spacing">所有团队今后将通过服务接口公开他们的数据和功能。</tspan>
        </text>
    </g>
    <g ed:parentid="250" transform="translate(1008,683.7)" ed:width="190" id="256" ed:height="20.5">
        <path transform="translate(-14.5,42.4)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,21.9C2,21.9,-5.5,-21.9,14.5,-21.9" fill="none" id="257"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L190,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="182" lengthAdjust="spacing">团队必须通过这些接口相互通信</tspan>
        </text>
    </g>
    <g ed:parentid="250" transform="translate(1008,712.9)" ed:width="983" id="258" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="259"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L983,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="975" lengthAdjust="spacing">不允许使用其他形式的进程间通信：不允许直接链接，不允许直接读取其他团队的数据存储，不支持共享内存模式，无后门。唯一允许的通信是通过网络上的服务接口调用</tspan>
        </text>
    </g>
    <g ed:parentid="250" transform="translate(1008,742.1)" ed:width="433" id="260" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="261"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L433,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="425" lengthAdjust="spacing">使用什么技术并不重要。HTTP，Corba，Pubsub，自定义协议 - 无关紧要</tspan>
        </text>
    </g>
    <g ed:parentid="250" transform="translate(1008,771.3)" ed:width="762" id="262" ed:height="20.5">
        <path transform="translate(-14.5,-1.4)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" fill="none" id="263"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L762,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="754" lengthAdjust="spacing">所有服务接口无一例外都必须从头开始设计为可外部化。也就是说，团队必须规划和设计能够将接口展示给外部开发人员。没有例外</tspan>
        </text>
    </g>
    <g ed:parentid="250" transform="translate(1008,800.5)" ed:width="177" id="264" ed:height="20.5">
        <path transform="translate(-14.5,-16)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-36.5C4.4,-36.5,-11.2,36.5,14.5,36.5" fill="none" id="265"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L177,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="169" lengthAdjust="spacing">任何不这样做的人都会被解雇</tspan>
        </text>
    </g>
    <g ed:parentid="268" transform="translate(788,533.45)" ed:layout="rightmap" ed:width="64.72499999999999" id="269" ed:height="29">
        <path stroke="#4486b1" stroke-linejoin="round" d="M14.5,0L43.2,0C47.1,0,52.8,-0.5,57,1.7C61.6,4.1,64.7,8.9,64.7,14.5C64.7,22.5,58.2,29,50.2,29L21.5,29C17.6,29,11.9,29.5,7.8,27.3C3.2,24.9,0,20.1,0,14.5C0,6.5,6.5,0,14.5,0z" fill="#ffffff"/>
        <text class="st2">
            <tspan style="white-space:pre" y="19.5" x="20" textLength="26" lengthAdjust="spacing">说明</tspan>
        </text>
    </g>
    <g ed:parentid="269" transform="translate(881.72,523.1)" ed:width="853" id="270" ed:height="20.5">
        <path transform="translate(-14.5,22.67)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,2.2C-2.4,2.2,4.6,-2.2,14.5,-2.2" fill="none" id="272"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L853,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="845" lengthAdjust="spacing">在很多企业的应用架构中，只有在业务逻辑最开始处理的部分设置登录态校验，后面的事务处理不再会出现用户鉴权，进而引发了一系列的越权漏洞</tspan>
        </text>
    </g>
    <g ed:parentid="269" transform="translate(881.72,552.3)" ed:width="500" id="271" ed:height="20.5">
        <path transform="translate(-14.5,8.07)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-12.4C-0,-12.4,-0.9,12.4,14.5,12.4" fill="none" id="273"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L500,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="492" lengthAdjust="spacing">K/V、RDS（关系型数据库）、消息队列等等，RPC没有鉴权导致可任意读取的安全问题</tspan>
        </text>
    </g>
    <g ed:parentid="274" transform="translate(687,1022.35)" ed:layout="rightmap" ed:width="64.72499999999999" id="275" ed:height="29">
        <path stroke="#4486b1" stroke-linejoin="round" d="M14.5,0L43.2,0C47.1,0,52.8,-0.5,57,1.7C61.6,4.1,64.7,8.9,64.7,14.5C64.7,22.5,58.2,29,50.2,29L21.5,29C17.6,29,11.9,29.5,7.8,27.3C3.2,24.9,0,20.1,0,14.5C0,6.5,6.5,0,14.5,0z" fill="#ffffff"/>
        <text class="st2">
            <tspan style="white-space:pre" y="19.5" x="20" textLength="26" lengthAdjust="spacing">说明</tspan>
        </text>
    </g>
    <g ed:parentid="275" transform="translate(780.72,1012)" ed:width="359" id="276" ed:height="20.5">
        <path transform="translate(-14.5,22.67)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,2.2C-2.4,2.2,4.6,-2.2,14.5,-2.2" fill="none" id="277"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L359,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="351" lengthAdjust="spacing">问题：普遍问题是不加密，或者加密了但没有使用正确的方法</tspan>
        </text>
    </g>
    <g ed:parentid="275" transform="translate(780.72,1041.2)" ed:width="770" id="278" ed:height="20.5">
        <path transform="translate(-14.5,8.08)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-12.4C-0,-12.4,-0.9,12.4,14.5,12.4" fill="none" id="279"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L770,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="762" lengthAdjust="spacing">正确方法：数据加密的正确方法本身就是可信计算的思路，信任根存储在HSM中，加密采用分层密钥结构，以方便动态转换和过期失效</tspan>
        </text>
    </g>
    <g ed:parentid="276" transform="translate(1168.72,1012)" ed:width="704" id="280" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="281"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L704,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="696" lengthAdjust="spacing">使用自定义UDF，算法选用不正确或加密强度不合适，或随机数问题，或者密钥没有Rotation机制，密钥没有存储在KMS中</tspan>
        </text>
    </g>
    <g ed:parentid="150" transform="translate(775,1070.4)" ed:width="840" id="282" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="283"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L840,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="832" lengthAdjust="spacing">结构化数据静态加密，以对称加密算法对诸如手机、身份证、银行卡等需要保密的字段加密持久化，另外除了数据库外，数仓里的加密也是类似的</tspan>
        </text>
    </g>
    <g ed:parentid="152" transform="translate(714,1099.6)" ed:width="281" id="284" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="285"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L281,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="273" lengthAdjust="spacing">对单个文件独立加密，一般情况下采用分块加密</tspan>
        </text>
    </g>
    <g ed:parentid="154" transform="translate(710,1128.8)" ed:width="723" id="286" ed:height="20.5">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" fill="none" id="287"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L723,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="715" lengthAdjust="spacing">说明：文件系统加密由于对应用来说是透明的，所以只要应用具备访问权限，那么文件系统加密对用户来说也是“无感知”的</tspan>
        </text>
    </g>
    <g ed:parentid="154" transform="translate(710,1158)" ed:width="775" id="288" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="289"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L775,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="767" lengthAdjust="spacing">作用：主要是冷数据持久化后存储介质可访问的问题，即使去机房拔一块硬盘，或者从一块报废的硬盘上尝试恢复数据，都是没有用的</tspan>
        </text>
    </g>
    <g ed:parentid="154" transform="translate(710,1187.2)" ed:width="656" id="290" ed:height="20.5">
        <path transform="translate(-14.5,5.9)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" fill="none" id="291"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L656,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="648" lengthAdjust="spacing">不足：对于API鉴权漏洞或者SQL注入而言，显然文件系统的加密是透明的，只要App有权限，漏洞利用也有权限。</tspan>
        </text>
    </g>
    <g ed:parentid="162" transform="translate(721,1398.7)" ed:width="476" id="292" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="293"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L476,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="468" lengthAdjust="spacing">研发和运维要分离，密钥持有者和数据运维者要分离，运维角色和审计角色要分离</tspan>
        </text>
    </g>
    <g ed:parentid="162" transform="translate(721,1427.9)" ed:width="333" id="294" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="295"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L333,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="325" lengthAdjust="spacing">特权账号须回收，满足最小权限，多权分立的审计原则。</tspan>
        </text>
    </g>
    <g ed:parentid="156" transform="translate(713,1252.7)" ed:width="177" id="296" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="297"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L177,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="169" lengthAdjust="spacing">针对人肉运维的常规审计手段</tspan>
        </text>
    </g>
    <g ed:parentid="156" transform="translate(713,1281.9)" ed:width="479" id="298" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="299"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L479,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="471" lengthAdjust="spacing">运维自动化，运维操作都被API化，所以针对这些API的调用也需要被列入审计范畴</tspan>
        </text>
    </g>
    <g ed:parentid="312" transform="translate(721,1336.05)" ed:layout="rightmap" ed:width="64.72499999999999" id="313" ed:height="29">
        <path stroke="#4486b1" stroke-linejoin="round" d="M14.5,0L43.2,0C47.1,0,52.8,-0.5,57,1.7C61.6,4.1,64.7,8.9,64.7,14.5C64.7,22.5,58.2,29,50.2,29L21.5,29C17.6,29,11.9,29.5,7.8,27.3C3.2,24.9,0,20.1,0,14.5C0,6.5,6.5,0,14.5,0z" fill="#ffffff"/>
        <text class="st2">
            <tspan style="white-space:pre" y="19.5" x="20" textLength="26" lengthAdjust="spacing">说明</tspan>
        </text>
    </g>
    <g ed:parentid="313" transform="translate(814.72,1325.7)" ed:width="47" id="318" ed:height="20.5">
        <path transform="translate(-14.5,22.67)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,2.2C-2.4,2.2,4.6,-2.2,14.5,-2.2" fill="none" id="324"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L47,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="39" lengthAdjust="spacing">场景：</tspan>
        </text>
    </g>
    <g ed:parentid="313" transform="translate(814.72,1369.5)" ed:width="60" id="319" ed:height="20.5">
        <path transform="translate(-14.5,0.77)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-19.7C1.5,-19.7,-4.5,19.7,14.5,19.7" fill="none" id="325"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">泄露点：</tspan>
        </text>
    </g>
    <g ed:parentid="318" transform="translate(890.72,1311.1)" ed:width="459" id="320" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="314"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L459,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="451" lengthAdjust="spacing">运维和安全的监控系统包含了全站用户流量，对用户Token和敏感数据需要脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="318" transform="translate(890.72,1340.3)" ed:width="580" id="321" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="315"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L580,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="572" lengthAdjust="spacing">监控系统也可能通过简单的计算得出一些运营数据，譬如模糊的交易数目，这些都是需要脱敏的地方</tspan>
        </text>
    </g>
    <g ed:parentid="319" transform="translate(903.72,1369.5)" ed:width="361" id="322" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="316"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L361,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="353" lengthAdjust="spacing">Debug方面也出过Debug Log带有CVV码等比较严重的安全事件</tspan>
        </text>
    </g>
    <g ed:parentid="164" transform="translate(739,1457.1)" ed:width="593" id="326" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="327"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L593,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="585" lengthAdjust="spacing">生产环境和测试环境必须有严格定义和分离，如特殊情况生产数据需要转测试，必须经过脱敏、匿名化</tspan>
        </text>
    </g>
    <g ed:parentid="170" transform="translate(716,1668.6)" ed:width="710" id="328" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="329"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L710,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="702" lengthAdjust="spacing">数据的分类标识、分布和加工，以及访问状况需要有一个全局的大盘视图，结合数据使用者的行为建立“态势感知”的能力</tspan>
        </text>
    </g>
    <g ed:parentid="168" transform="translate(716,1624.8)" ed:width="60" id="330" ed:height="20.5">
        <path transform="translate(-14.5,-1.4)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-21.9C2,-21.9,-5.5,21.9,14.5,21.9" fill="none" id="331"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">落地形式</tspan>
        </text>
    </g>
    <g ed:parentid="330" transform="translate(805,1610.2)" ed:width="80" id="332" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="333"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L80,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="72" lengthAdjust="spacing">放逐+检测型</tspan>
        </text>
    </g>
    <g ed:parentid="330" transform="translate(805,1639.4)" ed:width="80" id="334" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="335"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L80,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="72" lengthAdjust="spacing">隔离+管控型</tspan>
        </text>
    </g>
    <g ed:parentid="168" transform="translate(716,1551.8)" ed:width="60" id="336" ed:height="20.5">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" fill="none" id="337"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L60,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="52" lengthAdjust="spacing">常见问题</tspan>
        </text>
    </g>
    <g ed:parentid="336" transform="translate(805,1522.6)" ed:width="450" id="338" ed:height="20.5">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" fill="none" id="339"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L450,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="442" lengthAdjust="spacing">公司比较小的时候可以选择内部信任模式，不去过于纠结开源平台本身的安全</tspan>
        </text>
    </g>
    <g ed:parentid="336" transform="translate(805,1551.8)" ed:width="478" id="340" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="341"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L478,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="470" lengthAdjust="spacing">司规模比较大，数据RD和BI分析师成千上万的时候，内部信任模式就需要被抛弃了</tspan>
        </text>
    </g>
    <g ed:parentid="336" transform="translate(805,1581)" ed:width="535" id="342" ed:height="20.5">
        <path transform="translate(-14.5,5.9)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" fill="none" id="343"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L535,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="527" lengthAdjust="spacing">需要的是一站式的授权&amp;审计平台，需要看到数据的血缘继承关系，需要高敏数据仍然被加密</tspan>
        </text>
    </g>
    <g ed:parentid="344" transform="translate(909,1620.55)" ed:layout="rightmap" ed:width="155.725" id="345" ed:height="29">
        <path stroke="#4486b1" stroke-linejoin="round" d="M14.5,0L134.2,0C138.1,0,143.8,-0.5,148,1.7C152.6,4.1,155.7,8.9,155.7,14.5C155.7,22.5,149.2,29,141.2,29L21.5,29C17.6,29,11.9,29.5,7.8,27.3C3.2,24.9,0,20.1,0,14.5C0,6.5,6.5,0,14.5,0z" fill="#ffffff"/>
        <text class="st2">
            <tspan style="white-space:pre" y="19.5" x="20" textLength="117" lengthAdjust="spacing">尽可能避免人工操作</tspan>
        </text>
    </g>
    <g ed:parentid="180" transform="translate(700,2055.3)" ed:width="268" id="346" ed:height="20.5">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" fill="none" id="347"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L268,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="260" lengthAdjust="spacing">说明：对页面上需要展示的敏感信息进行脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="180" transform="translate(700,2099.1)" ed:width="47" id="348" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="349"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L47,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="39" lengthAdjust="spacing">途径：</tspan>
        </text>
    </g>
    <g ed:parentid="348" transform="translate(776,2084.5)" ed:width="320" id="350" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="351"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L320,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="312" lengthAdjust="spacing">完全脱敏：部分字段打码后不再展示完整的信息和字段</tspan>
        </text>
    </g>
    <g ed:parentid="348" transform="translate(776,2113.7)" ed:width="739" id="352" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="353"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L739,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="731" lengthAdjust="spacing">不完全脱敏：默认展示脱敏后的信息，但仍然保留查看明细的按钮（API），这样所有的查看明细都会有一条Log，对应审计需求</tspan>
        </text>
    </g>
    <g ed:parentid="174" transform="translate(674,1763.3)" ed:width="255" id="354" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="355"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L255,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="247" lengthAdjust="spacing">主要用在截图的场景，分为明水印和暗水印</tspan>
        </text>
    </g>
    <g ed:parentid="174" transform="translate(674,1792.5)" ed:width="294" id="356" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="357"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L294,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="286" lengthAdjust="spacing">形式也有很多种，有抵抗截屏的，也有抵抗拍照的</tspan>
        </text>
    </g>
    <g ed:parentid="182" transform="translate(713,2142.9)" ed:width="437" id="362" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="363"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L437,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="429" lengthAdjust="spacing">主要用来解决局部场景下避免操作和开发人员将敏感数据下载到本地的方法</tspan>
        </text>
    </g>
    <g ed:parentid="182" transform="translate(713,2172.1)" ed:width="367" id="364" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="365"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L367,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="359" lengthAdjust="spacing">跟VDI类似，比较厚重，使用门槛不高，不适合大面积普遍推广</tspan>
        </text>
    </g>
    <g ed:parentid="178" transform="translate(848,1909.3)" ed:width="217" id="368" ed:height="20.5">
        <path transform="translate(-14.5,49.7)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,29.2C3.3,29.2,-8.6,-29.2,14.5,-29.2" fill="none" id="369"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L217,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="209" lengthAdjust="spacing">对整个的OA类应用实现动态访问控制</tspan>
        </text>
    </g>
    <g ed:parentid="178" transform="translate(848,1938.5)" ed:width="125" id="370" ed:height="20.5">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" fill="none" id="371"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L125,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="117" lengthAdjust="spacing">全面去除匿名化访问</tspan>
        </text>
    </g>
    <g ed:parentid="178" transform="translate(848,1967.7)" ed:width="69" id="372" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,-0,14.5,-0" fill="none" id="373"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L69,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="61" lengthAdjust="spacing">全部HTTPS</tspan>
        </text>
    </g>
    <g ed:parentid="178" transform="translate(848,1996.9)" ed:width="385" id="374" ed:height="20.5">
        <path transform="translate(-14.5,5.9)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" fill="none" id="375"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L385,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="377" lengthAdjust="spacing">根据角色最小权限化，也就是每个账号即使泄露能访问到的也有限</tspan>
        </text>
    </g>
    <g ed:parentid="178" transform="translate(848,2026.1)" ed:width="502" id="376" ed:height="20.5">
        <path transform="translate(-14.5,-8.7)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-29.2C3.3,-29.2,-8.6,29.2,14.5,29.2" fill="none" id="377"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L502,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="494" lengthAdjust="spacing">提高账号泄露的成本（多因素认证）和检测手段，一旦检测到泄露提供远程擦除的能力</tspan>
        </text>
    </g>
    <g ed:parentid="176" transform="translate(669,1821.7)" ed:width="216" id="378" ed:height="20.5">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" fill="none" id="379"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L216,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="208" lengthAdjust="spacing">办公网和生产网组成的公司数据边界</tspan>
        </text>
    </g>
    <g ed:parentid="176" transform="translate(669,1850.9)" ed:width="463" id="380" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="381"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L463,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="455" lengthAdjust="spacing">由于办公移动化程度的加深，这种边界被进一步模糊化（实现形式为逻辑边界）</tspan>
        </text>
    </g>
    <g ed:parentid="176" transform="translate(669,1880.1)" ed:width="320" id="382" ed:height="20.5">
        <path transform="translate(-14.5,5.9)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" fill="none" id="383"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L320,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="312" lengthAdjust="spacing">用于应对大规模环境下重检测，轻阻断的数据保护模式</tspan>
        </text>
    </g>
    <g ed:parentid="190" transform="translate(742,2325.2)" ed:width="307" id="384" ed:height="20.5">
        <path transform="translate(-14.5,35.1)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,14.6C0.5,14.6,-2,-14.6,14.5,-14.6" fill="none" id="385"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L307,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="299" lengthAdjust="spacing">所有被第三方调用的数据，如非必要一律脱敏和加密</tspan>
        </text>
    </g>
    <g ed:parentid="190" transform="translate(742,2354.4)" ed:width="372" id="386" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="387"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L372,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="364" lengthAdjust="spacing">借助云平台安全赋能，避免一些因自身能力不足引起的安全问题</tspan>
        </text>
    </g>
    <g ed:parentid="190" transform="translate(742,2383.6)" ed:width="1035" id="388" ed:height="20.5">
        <path transform="translate(-14.5,5.9)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-14.6C0.5,-14.6,-2,14.6,14.5,14.6" fill="none" id="389"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L1035,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="1027" lengthAdjust="spacing">数据集中化，在云上集中之后利于实施一站式整体安全解决方案（数据加密，风控，反爬和数据泄露检测类服务），大幅度降低外部风险并在一定程度上降低作恶和监守自盗的问题</tspan>
        </text>
    </g>
    <g ed:parentid="188" transform="translate(690,2296)" ed:width="112" id="390" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="391"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L112,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="104" lengthAdjust="spacing">参照展示时的脱敏</tspan>
        </text>
    </g>
    <g ed:parentid="184" transform="translate(716,2237.6)" ed:width="554" id="392" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="393"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L554,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="546" lengthAdjust="spacing">所有的第三方接入必须有严格的用户协议，明确数据使用权利，数据披露限制和隐私保护的要求</tspan>
        </text>
    </g>
    <g ed:parentid="186" transform="translate(716,2266.8)" ed:width="333" id="394" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="395"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L333,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="325" lengthAdjust="spacing">专门的团队对开放平台的第三方进行机器审核及人工审核</tspan>
        </text>
    </g>
    <g ed:parentid="394" transform="translate(1078,2266.8)" ed:width="613" id="396" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="397"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L613,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="605" lengthAdjust="spacing">禁止“无照经营”和虚假三方，提高恶意第三方接入的门槛，同时给开发者/合作方公司信誉评级提供基础</tspan>
        </text>
    </g>
    <g ed:parentid="192" transform="translate(711,2412.8)" ed:width="185" id="398" ed:height="20.5">
        <path transform="translate(-14.5,20.5)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,0C-2.9,0,5.8,0,14.5,0" fill="none" id="399"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L185,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="177" lengthAdjust="spacing">创建专属SDK，用于第三方调用</tspan>
        </text>
    </g>
    <g ed:parentid="114" transform="translate(627,2456.6)" ed:width="34" id="400" ed:height="20.5">
        <path transform="translate(-14.5,-35.72)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-56.2C5.8,-56.2,-14.5,56.2,14.5,56.2" fill="none" id="401"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L34,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="26" lengthAdjust="spacing">反爬</tspan>
        </text>
    </g>
    <g ed:parentid="400" transform="translate(690,2442)" ed:width="632" id="402" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="403"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L632,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="624" lengthAdjust="spacing">说明：在这里主要是针对公开页面，或通过接口爬取的信息，因为脱敏这件事不可能在所有的环节做的很彻底</tspan>
        </text>
    </g>
    <g ed:parentid="400" transform="translate(690,2471.2)" ed:width="866" id="404" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="405"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L866,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="858" lengthAdjust="spacing">场景：便通过大量的“公开”信息也可以进行汇聚和数据挖掘，最终形成一些诸如用户关系链，经营数据或辅助决策类数据，造成过度信息披露的影响</tspan>
        </text>
    </g>
    <g ed:parentid="194" transform="translate(684,2536.7)" ed:width="398" id="406" ed:height="20.5">
        <path transform="translate(-14.5,27.8)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,7.3C-1.2,7.3,1.8,-7.3,14.5,-7.3" fill="none" id="407"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L398,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="390" lengthAdjust="spacing">说明：数据的主实例容易在视野范围内，而把备份类的数据忽略掉。</tspan>
        </text>
    </g>
    <g ed:parentid="194" transform="translate(684,2565.9)" ed:width="723" id="408" ed:height="20.5">
        <path transform="translate(-14.5,13.2)" stroke="#4486b1" stroke-linecap="round" stroke-linejoin="round" d="M-14.5,-7.3C-1.2,-7.3,1.8,7.3,14.5,7.3" fill="none" id="409"/>
        <path stroke="#4486b1" stroke-linejoin="round" d="M0,20.5L723,20.5" fill="none"/>
        <text class="st2">
            <tspan style="white-space:pre" y="15.8" x="4" textLength="715" lengthAdjust="spacing">快速实现：最好使用加密数据的方法，因为完整覆写不太可能在短时间内完成，但是加密数据的安全删除只要删除密钥即可。</tspan>
        </text>
    </g>
    <g transform="translate(153,1337.7)" ed:layout="rightmap" ed:topictype="mainidea" ed:width="243" id="101" ed:height="62">
        <path stroke-width="3" stroke="#4486b1" stroke-linejoin="round" d="M8,0L235,0C239.4,0,243,3.6,243,8L243,54C243,58.4,239.4,62,235,62L8,62C3.6,62,0,58.4,0,54L0,8C0,3.6,3.6,0,8,0z" fill="#eaf3fc"/>
        <text class="st3">
            <tspan style="white-space:pre" y="38.5" x="27" textLength="190" lengthAdjust="spacing">数据安全生命周期建设</tspan>
        </text>
    </g>
    <g transform="translate(397,1362.7)" ed:togtopicid="101">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(567,301.25)" ed:togtopicid="102">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(599,731.75)" ed:togtopicid="104">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(567,1103.85)" ed:togtopicid="106">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(583,1359.15)" ed:togtopicid="108">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(599,1614.45)" ed:togtopicid="110">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(583,1971.95)" ed:togtopicid="112">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(599,2358.65)" ed:togtopicid="114">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(567,2555.55)" ed:togtopicid="116">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(665,213.65)" ed:togtopicid="118">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(681,301.25)" ed:togtopicid="120">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(690,330.45)" ed:togtopicid="122">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(643,359.65)" ed:togtopicid="124">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(656,388.85)" ed:togtopicid="126">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(632,432.65)" ed:togtopicid="128">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(788,731.75)" ed:togtopicid="138">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(683,936.15)" ed:togtopicid="144">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(747,1074.65)" ed:togtopicid="150">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(686,1103.85)" ed:togtopicid="152">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(682,1162.25)" ed:togtopicid="154">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(685,1271.55)" ed:togtopicid="156">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(693,1417.55)" ed:togtopicid="162">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(711,1461.35)" ed:togtopicid="164">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(688,1585.25)" ed:togtopicid="168">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(688,1672.85)" ed:togtopicid="170">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(646,1782.15)" ed:togtopicid="174">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(641,1855.15)" ed:togtopicid="176">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(820,1971.95)" ed:togtopicid="178">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(672,2088.75)" ed:togtopicid="180">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(685,2161.75)" ed:togtopicid="182">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(688,2241.85)" ed:togtopicid="184">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(688,2271.05)" ed:togtopicid="186">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(662,2300.25)" ed:togtopicid="188">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(714,2358.65)" ed:togtopicid="190">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(683,2417.05)" ed:togtopicid="192">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(656,2555.55)" ed:togtopicid="194">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(741,257.45)" ed:togtopicid="204">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(906.725,257.45)" ed:togtopicid="215">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(831,330.45)" ed:togtopicid="220">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1262,950.75)" ed:togtopicid="240">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(771.725,877.75)" ed:togtopicid="245">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(980,731.75)" ed:togtopicid="250">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(853.725,541.95)" ed:togtopicid="269">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(752.725,1030.85)" ed:togtopicid="275">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1140.72,1016.25)" ed:togtopicid="276">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(786.725,1344.55)" ed:togtopicid="313">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(862.725,1329.95)" ed:togtopicid="318">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(875.725,1373.75)" ed:togtopicid="319">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(777,1629.05)" ed:togtopicid="330">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(777,1556.05)" ed:togtopicid="336">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(748,2103.35)" ed:togtopicid="348">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(1050,2271.05)" ed:togtopicid="394">
        <use xlink:href="#minus"/>
    </g>
    <g transform="translate(662,2460.85)" ed:togtopicid="400">
        <use xlink:href="#minus"/>
    </g>
    <symbol id="plus">
        <path d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6z" fill="url(#lg1)"/>
        <path stroke="#46a000" d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6zM3,6L9,6M6,3L6,9" fill="none"/>
    </symbol>
    <symbol id="minus">
        <path d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6z" fill="url(#lg1)"/>
        <path stroke="#46a000" d="M11,6C11,8.8,8.8,11,6,11C3.2,11,1,8.8,1,6C1,3.2,3.2,1,6,1C8.8,1,11,3.2,11,6zM3,6L9,6" fill="none"/>
    </symbol>
</svg>
</div>
        <div id="copyright">Created With  <a href="https://www.edrawsoft.com/" target="_blank" title="edrawsoft">MindMaster</a></div>
      </div>
    </div>
    <script>eval(atob('dmFyIG11YT13aW5kb3cubmF2aWdhdG9yLnVzZXJBZ2VudDsNCnZhciB1YT0obXVhLmluZGV4T2YoJ3J2OjExJykrbXVhLmluZGV4T2YoJ01TSUUnKSk+PTA7DQpOdW1iZXIucHJvdG90eXBlLnRvc3VpdHN2Zz1mdW5jdGlvbiAoKSB7DQogICAgdmFyIG51bT10aGlzLnZhbHVlT2YoKTsNCiAgICBpZihudW0lMT09PTApew0KICAgICAgICByZXR1cm4gbnVtKzAuNQ0KICAgIH1lbHNlIHJldHVybiBudW07DQp9Ow0KTnVtYmVyLnByb3RvdHlwZS5wbHVzej1mdW5jdGlvbigpIHsNCiAgICB2YXIgbnVtPXRoaXMudmFsdWVPZigpOw0KICAgIHJldHVybiBudW08MTA/JzAnK251bTpudW07DQp9Ow0KZnVuY3Rpb24gcGFyc2VEYXRlKG51bSkgew0KICAgIHZhciBkYXRlID0gbmV3IERhdGUobnVtKTsNCiAgICB2YXIgWSA9IGRhdGUuZ2V0RnVsbFllYXIoKSArICctJzsNCiAgICB2YXIgTSA9IChkYXRlLmdldE1vbnRoKCkrMSkucGx1c3ooKSArICctJzsNCiAgICB2YXIgRCA9IGRhdGUuZ2V0RGF0ZSgpLnBsdXN6KCkgKyAnICc7DQogICAgdmFyIGggPSBkYXRlLmdldEhvdXJzKCkucGx1c3ooKSArICc6JzsNCiAgICB2YXIgbW0gPSBkYXRlLmdldE1pbnV0ZXMoKS5wbHVzeigpICsgJzonOw0KICAgIHZhciBzID0gZGF0ZS5nZXRTZWNvbmRzKCkucGx1c3ooKTsNCiAgICByZXR1cm4gWStNK0QraCttbStzOw0KfQ0KLy8tLXByZWRlZmluZWQNCi8vY29tbWVudC0tDQp2YXIgY29tbWVudHM9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZz5nW2VkXFw6Y29tbWVudF0nKTsNCmZ1bmN0aW9uIGdldGN3aChwb3B1cCkgew0KICAgIGRvY3VtZW50LmJvZHkuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3N2ZycpWzBdLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICB2YXIgdz1wb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS53aWR0aDsNCiAgICB2YXIgaD1wb3B1cC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7DQogICAgcmV0dXJuIFt3LGhdDQp9DQpmb3IodmFyIGk9MDtpPGNvbW1lbnRzLmxlbmd0aDtpKyspew0KICAgIHZhciBwb3B1cD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnZycpOw0KICAgIHZhciBob3Zlcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgIHZhciBvbGluZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsJyNjZGNkZmYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd5JywnMCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywnMTYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3dpZHRoJywnMTYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwtb3BhY2l0eScsJzAuNicpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJyxjb21tZW50c1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICBob3Zlci5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICBjb21tZW50c1tpXS5hcHBlbmRDaGlsZChob3Zlcik7DQogICAgdmFyIGE9SlNPTi5wYXJzZShjb21tZW50c1tpXS5nZXRBdHRyaWJ1dGUoJ2VkOmNvbW1lbnQnKSk7DQogICAgdmFyIGhlaWdodD0wOw0KICAgIHZhciBjYXJyPVtdOw0KICAgIGZvcih2YXIgaj0wO2o8YS5sZW5ndGg7aisrKXsNCiAgICAgICAgdmFyIHN0YW1wPU51bWJlcihhW2pdLkRhdGUpKjEwMDA7DQogICAgICAgIHZhciB0aW1lPXBhcnNlRGF0ZShzdGFtcCk7DQogICAgICAgIHZhciBuYW1lPWFbal0uTmFtZTsNCiAgICAgICAgdmFyIG1lc3NhZ2U9YVtqXS5NZXNzYWdlOw0KICAgICAgICB2YXIgbWVzc2FnZUFycj1tZXNzYWdlLnNwbGl0KC9cbi8pOw0KICAgICAgICB2YXIgbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnZycpOw0KICAgICAgICB2YXIgbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBuLnNldEF0dHJpYnV0ZSgneCcsNSk7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCd5JywxMik7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCdmaWxsJywnIzAwNmVmZicpOw0KICAgICAgICBuLnRleHRDb250ZW50PW5hbWUrJ++8mic7DQogICAgICAgIG4uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCcxMicpOw0KICAgICAgICB0LnNldEF0dHJpYnV0ZSgneCcsMjAwKTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ3knLDEyKTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjOTY5Njk2Jyk7DQogICAgICAgIHQudGV4dENvbnRlbnQ9dGltZTsNCiAgICAgICAgdC5zZXRBdHRyaWJ1dGUoJ2ZvbnQtc2l6ZScsJzEwJyk7DQogICAgICAgIG0uc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoMjAsMjcpJyk7DQogICAgICAgIG0uc2V0QXR0cmlidXRlKCdmb250LXNpemUnLCcxMicpOw0KICAgICAgICBmb3IodmFyIGs9MDtrPG1lc3NhZ2VBcnIubGVuZ3RoO2srKyl7DQogICAgICAgICAgICB2YXIgdHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ3RzcGFuJyk7DQogICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgICAgICAgICB0cy5zZXRBdHRyaWJ1dGUoJ3knLGsqMTYpOw0KICAgICAgICAgICAgdHMudGV4dENvbnRlbnQ9bWVzc2FnZUFycltrXTsNCiAgICAgICAgICAgIG0uYXBwZW5kQ2hpbGQodHMpOw0KICAgICAgICB9DQogICAgICAgIG8uc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoMCwnK2hlaWdodCsnKScpOw0KICAgICAgICBvLmFwcGVuZENoaWxkKG4pOw0KICAgICAgICBvLmFwcGVuZENoaWxkKHQpOw0KICAgICAgICBvLmFwcGVuZENoaWxkKG0pOw0KICAgICAgICBjYXJyLnB1c2gobyk7DQogICAgICAgIHBvcHVwLmFwcGVuZENoaWxkKG8pOw0KICAgICAgICBoZWlnaHQ9KG1lc3NhZ2VBcnIubGVuZ3RoKzEpKjE2K2hlaWdodDsNCiAgICB9DQogICAgdmFyIHdhcnI9Z2V0Y3doKHBvcHVwKTsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgb2xpbmUuc2V0QXR0cmlidXRlKCd5JywnMCcpOw0KICAgIHZhciBvdz13YXJyWzBdKzEwLjU7DQogICAgdmFyIG9oPXdhcnJbMV0rMzsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3dpZHRoJyxvdyk7DQogICAgb2xpbmUuc2V0QXR0cmlidXRlKCdoZWlnaHQnLG9oKTsNCiAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCd3aGl0ZScpOw0KICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywnIzY1NjU2NScpOw0KICAgIHBvcHVwLmFwcGVuZENoaWxkKG9saW5lKTsNCiAgICB2YXIgbD1jYXJyLmxlbmd0aDsNCiAgICB3aGlsZShsLS0pew0KICAgICAgICBwb3B1cC5hcHBlbmRDaGlsZChjYXJyW2xdKTsNCiAgICB9DQogICAgcG9wdXAub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9Ow0KICAgIHBvcHVwLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7DQogICAgfTsNCiAgICB2YXIgY3M9Y29tbWVudHNbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKS5tYXRjaCgvXCgoXFMqfFxTKlxzXFMqKVwpLylbMV0uc3BsaXQoLyB8LC8pOw0KICAgIHZhciBwcz1jb21tZW50c1tpXS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICB2YXIgeD1wYXJzZUZsb2F0KGNzWzBdKStwYXJzZUZsb2F0KHBzWzBdKTsNCiAgICB2YXIgeT1wYXJzZUZsb2F0KHBzWzFdKTsNCiAgICB4PXgudG9zdWl0c3ZnKCk7DQogICAgeT15LnRvc3VpdHN2ZygpOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnY29tbWVudCcsJycpOw0KICAgIHBvcHVwLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnZWQ6Y29tbWVudGlkJyxjb21tZW50c1tpXS5wYXJlbnROb2RlLmlkKTsNCiAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZycpLmFwcGVuZENoaWxkKHBvcHVwKTsNCiAgICBjb21tZW50c1tpXS5vbm1vdXNlb3Zlcj1mdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBjb21tZW50aWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDpjb21tZW50aWQ9JyIrY29tbWVudGlkKyInXVtjb21tZW50XSIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9Ow0KICAgIGNvbW1lbnRzW2ldLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgY29tbWVudGlkPXRoaXMucGFyZW50Tm9kZS5pZDsNCi8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uKCkucmVtb3ZlQWxsUmFuZ2VzKCk7DQogICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6Y29tbWVudGlkPSciK2NvbW1lbnRpZCsiJ11bY29tbWVudF0iKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9DQp9DQovLy0tY29tbWVudA0KLy9ub3RlLS0NCmlmKCF1YSl7DQogICAgdmFyIG5vdGVzPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2c+Z1tlZFxcOm5vdGVdJyk7DQogICAgZnVuY3Rpb24gZ2V0d2gocyxwKSB7DQogICAgICAgIHZhciBtYWlucD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTsNCiAgICAgICAgbWFpbnAuc3R5bGUuY3NzVGV4dD1zOw0KICAgICAgICBtYWlucC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUtYmxvY2snOw0KICAgICAgICBtYWlucC5pbm5lckhUTUw9cDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChtYWlucCk7DQogICAgICAgIHZhciB3PW1haW5wLmNsaWVudFdpZHRoOw0KICAgICAgICB2YXIgaD1tYWlucC5jbGllbnRIZWlnaHQ7DQogICAgICAgIGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobWFpbnApOw0KICAgICAgICByZXR1cm4gW3csaF0NCiAgICB9DQogICAgZm9yKHZhciBpPTA7aTxub3Rlcy5sZW5ndGg7aSsrKXsNCiAgICAgICAgdmFyIGE9bm90ZXNbaV0uZ2V0QXR0cmlidXRlKCdlZDpub3RlJyk7DQogICAgICAgIHZhciBtYWlucD1hLm1hdGNoKC88cChbXFNcc10qKTxcL3A+L2cpWzBdOw0KICAgICAgICB2YXIgbWFpbnM9YS5tYXRjaCgvc3R5bGU9IiguKj8pIi8pWzFdOw0KICAgICAgICB2YXIgb3V0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCdnJyk7DQogICAgICAgIHZhciBvbGluZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgICAgICB2YXIgcG9wdXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2ZvcmVpZ25PYmplY3QnKTsNCiAgICAgICAgdmFyIGhvdmVyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCdyZWN0Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbCcsJyNjZGNkZmYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywnMCcpOw0KICAgICAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3knLCcwJyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnaGVpZ2h0JywnMTYnKTsNCiAgICAgICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsJzE2Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgnZmlsbC1vcGFjaXR5JywnMC42Jyk7DQogICAgICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJyxub3Rlc1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpKTsNCiAgICAgICAgaG92ZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIG5vdGVzW2ldLmFwcGVuZENoaWxkKGhvdmVyKTsNCiAgICAgICAgcG9wdXAuc3R5bGUuY3NzVGV4dD1tYWluczsNCiAgICAgICAgcG9wdXAuaW5uZXJIVE1MPW1haW5wOw0KICAgICAgICB2YXIgd2g9Z2V0d2gobWFpbnMsbWFpbnApOw0KICAgICAgICBwb3B1cC5zZXRBdHRyaWJ1dGUoJ3dpZHRoJyx3aFswXSsxNik7DQogICAgICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaGVpZ2h0Jyx3aFsxXSs4KTsNCiAgICAgICAgcG9wdXAuc2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nLCd0cmFuc2xhdGUoOCw0KScpOw0KICAgICAgICBwb3B1cC5zdHlsZS50ZXh0QWxpZ249J2xlZnQnOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ3gnLCcwJyk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgneScsJzAnKTsNCiAgICAgICAgb2xpbmUuc2V0QXR0cmlidXRlKCd3aWR0aCcsd2hbMF0rMTYpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsd2hbMV0rOCk7DQogICAgICAgIG9saW5lLnNldEF0dHJpYnV0ZSgnc3Ryb2tlJywnI2EyN2EwMCcpOw0KICAgICAgICBvbGluZS5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjZmZlNzlkJyk7DQogICAgICAgIG91dC5hcHBlbmRDaGlsZChvbGluZSk7DQogICAgICAgIG91dC5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgICAgIG91dC5zZXRBdHRyaWJ1dGUoJ25vdGUnLCcnKTsNCiAgICAgICAgb3V0LnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICBvdXQuc2V0QXR0cmlidXRlKCdlZDpub3RlaWQnLG5vdGVzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgICAgICBvdXQub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgICAgIH07DQogICAgICAgIG91dC5vbm1vdXNlb3V0PWZ1bmN0aW9uICgpIHsNCi8vICAgICAgICB3aW5kb3cuZ2V0U2VsZWN0aW9uID8gd2luZG93LmdldFNlbGVjdGlvbigpLnJlbW92ZVJhbmdlKHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZSk6ZG9jdW1lbnQuc2VsZWN0aW9uLmVtcHR5KCk7DQoNCiAgICAgICAgICAgIHRoaXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIH07DQogICAgICAgIHZhciBjcz1ub3Rlc1tpXS5xdWVyeVNlbGVjdG9yKCd1c2UnKS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgICAgIHZhciBwcz1ub3Rlc1tpXS5wYXJlbnROb2RlLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICAgICAgdmFyIHg9cGFyc2VGbG9hdChjc1swXSkrcGFyc2VGbG9hdChwc1swXSk7DQogICAgICAgIHZhciB5PXBhcnNlRmxvYXQocHNbMV0pOw0KICAgICAgICB4PXgudG9zdWl0c3ZnKCk7DQogICAgICAgIHk9eS50b3N1aXRzdmcoKTsNCiAgICAgICAgb3V0LnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjc3ZnLWNvbnRhaW5lciA+IHN2ZycpLmFwcGVuZENoaWxkKG91dCk7DQogICAgICAgIG5vdGVzW2ldLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBub3RlaWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOm5vdGVpZD0nIitub3RlaWQrIiddW25vdGVdIikuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICB9Ow0KICAgICAgICBub3Rlc1tpXS5vbm1vdXNlb3V0PWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHZhciBub3RlaWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KLy8gICAgICAgIHdpbmRvdy5nZXRTZWxlY3Rpb24oKS5yZW1vdmVBbGxSYW5nZXMoKTsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOm5vdGVpZD0nIitub3RlaWQrIiddW25vdGVdIikuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgICAgIH0NCiAgICB9DQp9ZWxzZXsNCiAgICBjb25zb2xlLmxvZygn5oqx5q2J77yMSUXmtY/op4jlmajkuI3mlK/mjIFub3Rl6Kej5p6Q77yM6K+35L2/55So5YW25LuW5YaF5qC45rWP6KeI5Zmo44CC6LCi6LCi77yBJykNCn0NCi8vLS1ub3RlDQovL2h5cGVybGluay0tDQp2YXIgbGlua3M9ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZz5nW2VkXFw6aHlwZXJsaW5rXScpOw0KZnVuY3Rpb24gZ2V0bWF4bGVuKGFycixicnIpIHsNCiAgICB2YXIgbD0wOw0KICAgIHZhciBsbD0wOw0KICAgIGZvcih2YXIgaj0wO2o8YXJyLmxlbmd0aDtqKyspew0KICAgICAgICB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBpZighaXNOYU4obGlua2FycltqXSkpew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudD0nUGFnZS0nK2FycltqXTsNCiAgICAgICAgfWVsc2V7DQogICAgICAgICAgICBlLnRleHRDb250ZW50PWFycltqXTsNCiAgICAgICAgfQ0KICAgICAgICBlLnN0eWxlLmZvbnRTaXplPScxMnB4JzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoZSk7DQogICAgICAgIHZhciBldz1lLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoZSk7DQogICAgICAgIHZhciBoPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCd0ZXh0Jyk7DQogICAgICAgIGgudGV4dENvbnRlbnQ9YnJyW2pdOw0KICAgICAgICBoLnN0eWxlLmZvbnRTaXplPScxMnB4JzsNCiAgICAgICAgaC5zdHlsZS5mb250V2VpZ2h0PSdib2xkJzsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0uYXBwZW5kQ2hpbGQoaCk7DQogICAgICAgIHZhciBodz1oLmdldEJCb3goKS53aWR0aDsNCiAgICAgICAgZG9jdW1lbnQuYm9keS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnc3ZnJylbMF0ucmVtb3ZlQ2hpbGQoaCk7DQogICAgICAgIGw9ZXc+aHc/ZXc6aHc7DQogICAgICAgIGxsPWw+bGw/bDpsbDsNCiAgICB9DQogICAgcmV0dXJuIGxsOw0KfQ0KZm9yKHZhciBpPTA7aTxsaW5rcy5sZW5ndGg7aSsrKXsNCiAgICB2YXIgcG9wdXA9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ2cnKTsNCiAgICB2YXIgaG92ZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycsJ3JlY3QnKTsNCiAgICB2YXIgZGVzY2Fycj1bXTsNCiAgICB2YXIgbGlua2Fycj1bXTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2ZpbGwnLCcjY2RjZGZmJyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd4JywnMCcpOw0KICAgIGhvdmVyLnNldEF0dHJpYnV0ZSgneScsJzAnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsJzE2Jyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCd3aWR0aCcsJzE2Jyk7DQogICAgaG92ZXIuc2V0QXR0cmlidXRlKCdmaWxsLW9wYWNpdHknLCcwLjYnKTsNCiAgICBob3Zlci5zZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScsbGlua3NbaV0ucXVlcnlTZWxlY3RvcigndXNlJykuZ2V0QXR0cmlidXRlKCd0cmFuc2Zvcm0nKSk7DQogICAgaG92ZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7DQogICAgbGlua3NbaV0uYXBwZW5kQ2hpbGQoaG92ZXIpOw0KICAgIC8vIGNvbnNvbGUubG9nKGxpbmtzW2ldLmdldEF0dHJpYnV0ZSgnZWQ6aHlwZXJsaW5rJykpOw0KICAgIHZhciBhPUpTT04ucGFyc2UobGlua3NbaV0uZ2V0QXR0cmlidXRlKCdlZDpoeXBlcmxpbmsnKSk7DQogICAgdmFyIGNzPWxpbmtzW2ldLnF1ZXJ5U2VsZWN0b3IoJ3VzZScpLmdldEF0dHJpYnV0ZSgndHJhbnNmb3JtJykubWF0Y2goL1woKFxTKnxcUypcc1xTKilcKS8pWzFdLnNwbGl0KC8gfCwvKTsNCiAgICB2YXIgcHM9bGlua3NbaV0ucGFyZW50Tm9kZS5nZXRBdHRyaWJ1dGUoJ3RyYW5zZm9ybScpLm1hdGNoKC9cKChcUyp8XFMqXHNcUyopXCkvKVsxXS5zcGxpdCgvIHwsLyk7DQogICAgdmFyIHg9cGFyc2VGbG9hdChjc1swXSkrcGFyc2VGbG9hdChwc1swXSk7DQogICAgdmFyIHk9cGFyc2VGbG9hdChwc1sxXSk7DQogICAgeD14LnRvc3VpdHN2ZygpOw0KICAgIHk9eS50b3N1aXRzdmcoKTsNCiAgICB2YXIgYWw9YS5sZW5ndGg7DQogICAgZm9yKHZhciBqPTA7ajxhbDtqKyspew0KICAgICAgICBsaW5rYXJyLnB1c2goYVtqXS5saW5rKTsNCiAgICAgICAgZGVzY2Fyci5wdXNoKGFbal0uZGVzYyk7DQogICAgfQ0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgndHJhbnNmb3JtJywndHJhbnNsYXRlKCcreCsnLCcreSsnKScpOw0KICAgIHZhciBtYXg9Z2V0bWF4bGVuKGxpbmthcnIsZGVzY2Fycik7DQogICAgZm9yKHZhciBrPTA7azxhbDtrKyspew0KICAgICAgICB2YXIgYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnYScpOw0KICAgICAgICB2YXIgZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywncmVjdCcpOw0KICAgICAgICB2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICB2YXIgZj1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywndGV4dCcpOw0KICAgICAgICBpZihpc05hTihsaW5rYXJyW2tdKSl7DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgnaHJlZicsbGlua2FycltrXSk7DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgndGFyZ2V0JywnX2JsYW5rJyk7DQogICAgICAgICAgICBlLnRleHRDb250ZW50PWxpbmthcnJba107DQogICAgICAgIH1lbHNlew0KICAgICAgICAgICAgZS50ZXh0Q29udGVudD0nUGFnZS0nK2xpbmthcnJba107DQogICAgICAgICAgICBjLnNldEF0dHJpYnV0ZSgnaHJlZicsJyMnK2xpbmthcnJba10pOw0KICAgICAgICB9DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCd3aWR0aCcsbWF4KzEwKTsNCiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ2hlaWdodCcsJzMzJyk7DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCdzdHJva2UnLCcjOTk5OTk5Jyk7DQogICAgICAgIGQuc2V0QXR0cmlidXRlKCdmaWxsJywnd2hpdGUnKTsNCiAgICAgICAgZC5zZXRBdHRyaWJ1dGUoJ3knLDMzKmspOw0KICAgICAgICBmLnRleHRDb250ZW50PWRlc2NhcnJba107DQogICAgICAgIGYuc3R5bGUuZm9udFNpemU9JzEycHgnOw0KICAgICAgICBmLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnOw0KICAgICAgICBmLnNldEF0dHJpYnV0ZSgneCcsNSk7DQogICAgICAgIGYuc2V0QXR0cmlidXRlKCd5JywzMyprKzEyKTsNCiAgICAgICAgZS5zdHlsZS5mb250U2l6ZT0nMTJweCc7DQogICAgICAgIGUuc2V0QXR0cmlidXRlKCd5JywzMyprKzI4KTsNCiAgICAgICAgZS5zZXRBdHRyaWJ1dGUoJ3gnLDUpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGQpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGYpOw0KICAgICAgICBjLmFwcGVuZENoaWxkKGUpOw0KICAgICAgICBjLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgICAgIHRoaXMucXVlcnlTZWxlY3RvcigncmVjdCcpLnN0eWxlLmZpbGw9JyNlMWUxZmYnDQogICAgICAgIH07DQogICAgICAgIGMub25tb3VzZW91dD1mdW5jdGlvbiAoKSB7DQogICAgICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5maWxsPSd3aGl0ZScNCiAgICAgICAgfTsNCiAgICAgICAgcG9wdXAuYXBwZW5kQ2hpbGQoYyk7DQogICAgfQ0KICAgIHBvcHVwLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIHBvcHVwLnNldEF0dHJpYnV0ZSgnaHlwZXJsaW5rJywnJyk7DQogICAgcG9wdXAuc2V0QXR0cmlidXRlKCdlZDpsaW5raWQnLGxpbmtzW2ldLnBhcmVudE5vZGUuaWQpOw0KICAgIHBvcHVwLm9ubW91c2VvdmVyPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdibG9jayc7DQogICAgfTsNCiAgICBwb3B1cC5vbmNsaWNrPWZ1bmN0aW9uICgpIHsNCiAgICAgICAgdGhpcy5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9Ow0KICAgIHBvcHVwLm9ubW91c2VvdXQ9ZnVuY3Rpb24gKCkgew0KICAgICAgICB0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnOw0KICAgIH07DQogICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI3N2Zy1jb250YWluZXIgPiBzdmcnKS5hcHBlbmRDaGlsZChwb3B1cCk7DQogICAgbGlua3NbaV0ub25tb3VzZW92ZXI9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgbGlua2lkPXRoaXMucGFyZW50Tm9kZS5pZDsNCiAgICAgICAgdGhpcy5xdWVyeVNlbGVjdG9yKCdyZWN0Jykuc3R5bGUuZGlzcGxheT0nYmxvY2snOw0KICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6bGlua2lkPSciK2xpbmtpZCsiJ11baHlwZXJsaW5rXSIpLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzsNCiAgICB9DQogICAgbGlua3NbaV0ub25tb3VzZW91dD1mdW5jdGlvbiAoKSB7DQogICAgICAgIHZhciBsaW5raWQ9dGhpcy5wYXJlbnROb2RlLmlkOw0KICAgICAgICB0aGlzLnF1ZXJ5U2VsZWN0b3IoJ3JlY3QnKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOmxpbmtpZD0nIitsaW5raWQrIiddW2h5cGVybGlua10iKS5zdHlsZS5kaXNwbGF5PSdub25lJzsNCiAgICB9DQp9DQovLy0taHlwZXJsaW5rDQovL2luaXRpYWxpemUtLQ0KdmFyIHNoYXBlPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2dbZWRcXDp0b2d0b3BpY2lkXScpOw0KdmFyIG1JZD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdnW2VkXFw6dG9waWN0eXBlXScpOw0KdmFyIGRhdGFUcmVlPXt9Ow0KdmFyIGV4dHJhUmVsYT17fTsNCnZhciBjaGVja0lEPScnOw0KZm9yKHZhciBpPTA7aTxtSWQubGVuZ3RoO2krKyl7DQogICAgdmFyIHR5cGU9bUlkW2ldLmdldEF0dHJpYnV0ZSgnZWQ6dG9waWN0eXBlJyk7DQogICAgdmFyIHNpZD1tSWRbaV0uaWQ7DQogICAgaWYodHlwZSE9PSdjYWxsb3V0Jyl7DQogICAgICAgIGluaXQoc2lkLGRhdGFUcmVlKQ0KICAgIH0NCn0NCmZ1bmN0aW9uIGluaXQoaWQsIG9iaikgew0KICAgIHZhciBjaGlsZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6cGFyZW50aWQ9JyIgKyBpZCArICInXTpub3QoW2VkXFw6dG9waWN0eXBlXSkiKTsNCiAgICB2YXIgY2FsbHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6cGFyZW50aWQ9JyIgKyBpZCArICInXVtlZFxcOnRvcGljdHlwZV0iKTsNCiAgICB2YXIgc3VtbWFyeSA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoInBhdGhbZWRcXDpwYXJlbnRpZCo9JyIgKyBpZCArICInXVtlZFxcOnR5cGU9J3N1bW1hcnknXSIpOw0KICAgIHZhciBib3VuZGFyeT0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgicGF0aFtlZFxcOnBhcmVudGlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0nYm91bmRhcnknXSIpOw0KICAgIHZhciByZWxhZnJvbT1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJnW2VkXFw6ZnJvbWlkKj0nIiArIGlkICsgIiddW2VkXFw6dHlwZT0ncmVsYXRpb24nXSIpOw0KICAgIHZhciByZWxhdG89ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZ1tlZFxcOnRvaWQqPSciICsgaWQgKyAiJ11bZWRcXDp0eXBlPSdyZWxhdGlvbiddIik7DQogICAgb2JqWyJtIiArIGlkXSA9IHt9Ow0KICAgIHZhciB0eXBlID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpLmdldEF0dHJpYnV0ZSgnZWQ6dG9waWN0eXBlJyk7DQogICAgdmFyIGl3PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOndpZHRoJyk7DQogICAgdmFyIGloPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOmhlaWdodCcpOw0KICAgIGlmICh0eXBlKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0udHlwZSA9IHR5cGU7DQogICAgfQ0KICAgIGlmKGl3JiZpaCl7DQogICAgICAgIG9ialsibSIgKyBpZF0ud2lkdGggPWl3Ow0KICAgICAgICBvYmpbIm0iICsgaWRdLmhlaWdodCA9aWg7DQogICAgfQ0KICAgIGlmIChyZWxhZnJvbS5sZW5ndGggIT09IDApIHsNCiAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhZnJvbSA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHJlbGFmcm9tLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgaW5kZXhpZCA9IHJlbGFmcm9tW2ldLmlkOw0KICAgICAgICAgICAgdmFyIHRvaWQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbmRleGlkKS5nZXRBdHRyaWJ1dGUoJ2VkOnRvaWQnKTsNCiAgICAgICAgICAgIGlmIChleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCkgew0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtpbmRleGlkXSA9IHsNCiAgICAgICAgICAgICAgICAgICAgaWQ6IGluZGV4aWQsDQogICAgICAgICAgICAgICAgICAgIGZyb21pZDogaWQsDQogICAgICAgICAgICAgICAgICAgIHRvaWQ6IHRvaWQsDQogICAgICAgICAgICAgICAgICAgIGlzQzogZmFsc2UNCiAgICAgICAgICAgICAgICB9Ow0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhZnJvbVtpbmRleGlkXT17fTsNCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0ucmVsYWZyb20uZGlzcGxheT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnPydibG9jayc6J25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChyZWxhdG8ubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0ucmVsYXRvID0ge307DQogICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcmVsYXRvLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgaW5kZXhpZD1yZWxhdG9baV0uaWQ7DQogICAgICAgICAgICB2YXIgZnJvbWlkPWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGluZGV4aWQpLmdldEF0dHJpYnV0ZSgnZWQ6ZnJvbWlkJyk7DQogICAgICAgICAgICBpZihleHRyYVJlbGFbaW5kZXhpZF0gPT09IHVuZGVmaW5lZCl7DQogICAgICAgICAgICAgICAgZXh0cmFSZWxhW2luZGV4aWRdPXsNCiAgICAgICAgICAgICAgICAgICAgaWQ6aW5kZXhpZCwNCiAgICAgICAgICAgICAgICAgICAgZnJvbWlkOmZyb21pZCwNCiAgICAgICAgICAgICAgICAgICAgdG9pZDppZCwNCiAgICAgICAgICAgICAgICAgICAgaXNDOmZhbHNlDQogICAgICAgICAgICAgICAgfTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0ucmVsYXRvW2luZGV4aWRdPXt9Ow0KICAgICAgICAgICAgb2JqWyJtIiArIGlkXS5yZWxhdG8uZGlzcGxheT1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuc3R5bGUuZGlzcGxheSAhPT0gJ25vbmUnPydibG9jayc6J25vbmUnOw0KICAgICAgICB9DQogICAgfQ0KICAgIGlmIChjaGlsZHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2hpbGQgPSB7fTsNCiAgICAgICAgaWYgKGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKSkgew0KICAgICAgICAgICAgLy8gY29uc29sZS5sb2coZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIgKyBpZCArICInXSIpLmNoaWxkTm9kZXNbMF0uZ2V0QXR0cmlidXRlKCd4bGluazpocmVmJykpOw0KICAgICAgICAgICAgdmFyIHRvZyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciICsgaWQgKyAiJ10iKS5jaGlsZHJlblswXS5nZXRBdHRyaWJ1dGUoJ3hsaW5rOmhyZWYnKS5zbGljZSgxKTsNCiAgICAgICAgICAgIG9ialsibSIgKyBpZF0udG9ndHlwZSA9IHRvZzsNCiAgICAgICAgfQ0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNoaWxkcy5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9IGNoaWxkc1tpXS5pZDsNCiAgICAgICAgICAgIGluaXQoY2lkLCBvYmpbIm0iICsgaWRdLmNoaWxkKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoY2FsbHMubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uY2FsbCA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNhbGxzLmxlbmd0aDsgaSsrKSB7DQogICAgICAgICAgICB2YXIgY2lkID0gY2FsbHNbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5jYWxsKTsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZiAoYm91bmRhcnkubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uYm91bmRhcnkgPSB7fTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3VuZGFyeS5sZW5ndGg7IGkrKykgew0KICAgICAgICAgICAgdmFyIGNpZCA9Ym91bmRhcnlbaV0uaWQ7DQogICAgICAgICAgICBpbml0KGNpZCwgb2JqWyJtIiArIGlkXS5ib3VuZGFyeSk7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKHN1bW1hcnkubGVuZ3RoICE9PSAwKSB7DQogICAgICAgIG9ialsibSIgKyBpZF0uc3VtbWFyeSA9IHt9Ow0KICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN1bW1hcnkubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBjaWQgPSBzdW1tYXJ5W2ldLmlkOw0KICAgICAgICAgICAgaW5pdChjaWQsIG9ialsibSIgKyBpZF0uc3VtbWFyeSk7DQogICAgICAgIH0NCiAgICB9DQp9DQovLy0taW5pdGlhbGl6ZQ0KLy90b2dnbGVkaXNwbGF5LS0NCnZhciBjaGFpbkFycj1bXTsNCmZ1bmN0aW9uIGdldGNoYWluKGlkKXsNCiAgICBjaGFpbkFyci51bnNoaWZ0KCdtJytpZCk7DQogICAgdmFyIHBhcmVudD1kb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCkuZ2V0QXR0cmlidXRlKCdlZDpwYXJlbnRpZCcpOw0KICAgIGlmKCFwYXJlbnQpew0KICAgICAgICByZXR1cm47DQogICAgfQ0KICAgIGdldGNoYWluKHBhcmVudCk7DQp9DQpmdW5jdGlvbiBnZXRvYmooaWQpIHsNCiAgICBjaGFpbkFycj1bXTsNCiAgICBnZXRjaGFpbihpZCk7DQogICAgdmFyIG1haW49Y2hhaW5BcnJbMF07DQogICAgaWYoY2hhaW5BcnIubGVuZ3RoPjEpew0KICAgICAgICB2YXIgb2JqPWRhdGFUcmVlW21haW5dOw0KICAgICAgICAvLyBjb25zb2xlLmxvZyhjaGFpbkFycik7DQogICAgICAgIGZvcih2YXIgaT0xO2k8Y2hhaW5BcnIubGVuZ3RoO2krKykgew0KICAgICAgICAgICAgdmFyIGEgPSBjaGFpbkFycltpXTsNCiAgICAgICAgICAgIGZvcih2YXIgaj0wO2o8T2JqZWN0LmtleXMob2JqKS5sZW5ndGg7aisrKXsNCiAgICAgICAgICAgICAgICB2YXIgY29iaj0gb2JqW09iamVjdC5rZXlzKG9iailbal1dW2FdOw0KICAgICAgICAgICAgICAgIGlmKGNvYmopew0KICAgICAgICAgICAgICAgICAgICBvYmo9Y29iajsNCiAgICAgICAgICAgICAgICAgICAgY29udGludWUNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgcmV0dXJuIG9iag0KICAgIH1lbHNlew0KICAgICAgICB2YXIgb2JqPWRhdGFUcmVlW21haW5dOw0KICAgICAgICByZXR1cm4gb2JqDQogICAgfQ0KDQp9DQpmb3IodmFyIGk9MDtpPHNoYXBlLmxlbmd0aDtpKyspew0KICAgIHNoYXBlW2ldLm9uY2xpY2s9ZnVuY3Rpb24gKCkgew0KICAgICAgICB2YXIgaWQ9TnVtYmVyKHRoaXMuZ2V0QXR0cmlidXRlKCdlZDp0b2d0b3BpY2lkJykpOw0KICAgICAgICB2YXIgb2JqPWdldG9iaihpZCk7DQoNCiAgICAgICAgdmFyIHR5cGU9b2JqLnRvZ3R5cGU9PT0nbWludXMnPydwbHVzJzonbWludXMnOw0KICAgICAgICB2YXIgZGlzcGxheT1vYmoudG9ndHlwZT09PSdtaW51cyc/J25vbmUnOidibG9jayc7DQogICAgICAgIHRoaXMuY2hpbGRyZW5bMF0uc2V0QXR0cmlidXRlKCd4bGluazpocmVmJywnIycrdHlwZSk7DQogICAgICAgIG9iai50b2d0eXBlPXR5cGU7DQogICAgICAgIGNoZWNrSUQ9b2JqOw0KDQogICAgICAgIHV0ZChvYmosaWQsZGlzcGxheSk7DQogICAgICAgIGV4dHJhUmVsYUZpbigpOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHV0ZChvYmosaWQsc2hvdyxvYykgew0KDQogICAgdmFyIHBzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKS5zdHlsZS5kaXNwbGF5IT09ICdub25lJz8nYmxvY2snOidub25lJzsNCiAgICBpZiAob2JqLnJlbGFmcm9tKXsNCiAgICAgICAgaWYob2JqLnJlbGFmcm9tLmRpc3BsYXkhPT0gcHNob3cpew0KICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhvYmoucmVsYWZyb20pOw0KICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLDEpOw0KICAgICAgICAgICAgZm9yKHZhciBrPTA7azxyZWxhZnJvbXMubGVuZ3RoO2srKyl7DQogICAgICAgICAgICAgICAgdmFyIGQ9cmVsYWZyb21zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9iai5yZWxhZnJvbS5kaXNwbGF5ID0gcHNob3c7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKG9iai5yZWxhdG8pew0KICAgICAgICBpZihvYmoucmVsYXRvLmRpc3BsYXkhPT0gcHNob3cpew0KICAgICAgICAgICAgdmFyIHJlbGF0b3M9T2JqZWN0LmtleXMob2JqLnJlbGF0byk7DQogICAgICAgICAgICByZWxhdG9zLnNwbGljZShyZWxhdG9zLmluZGV4T2YoJ2Rpc3BsYXknKSwxKTsNCiAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYXRvcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICB2YXIgZD1yZWxhdG9zW2tdOw0KICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIG9iai5yZWxhdG8uZGlzcGxheSA9IHBzaG93Ow0KICAgICAgICB9DQogICAgfQ0KICAgIGlmKG9iai5jYWxsKXsNCiAgICAgICAgdmFyIGNhbGxzPU9iamVjdC5rZXlzKG9iai5jYWxsKTsNCiAgICAgICAgaWYoY2hlY2tJRCE9PW9iail7DQogICAgICAgICAgICBmb3IodmFyIGk9MDtpIDwgY2FsbHMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9Y2FsbHNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGI9b2JqLmNhbGxbY2FsbHNbaV1dOw0KICAgICAgICAgICAgICAgIHZhciBjPWIudG9ndHlwZTsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChhKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgaWYgKGIucmVsYWZyb20mJiFjKXsNCiAgICAgICAgICAgICAgICAgICAgaWYoYi5yZWxhZnJvbS5kaXNwbGF5IT09IHNob3cpew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhiLnJlbGFmcm9tKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGFmcm9tcy5zcGxpY2UocmVsYWZyb21zLmluZGV4T2YoJ2Rpc3BsYXknKSwxKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYWZyb21zLmxlbmd0aDtrKyspew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGFmcm9tc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmIChiLnJlbGF0byYmIWMpew0KICAgICAgICAgICAgICAgICAgICBpZihiLnJlbGF0by5kaXNwbGF5IT09IHNob3cpew0KICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGF0b3M9T2JqZWN0LmtleXMoYi5yZWxhdG8pOw0KICAgICAgICAgICAgICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksMSk7DQogICAgICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGs9MDtrPHJlbGF0b3MubGVuZ3RoO2srKyl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQ9cmVsYXRvc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBiLnJlbGF0by5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihjKXsNCiAgICAgICAgICAgICAgICAgICAgZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZ1tlZFxcOnRvZ3RvcGljaWQ9JyIrYSsiJ10iKS5zdHlsZS5kaXNwbGF5PXNob3c7DQogICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBpZiAoKGIuY2FsbHx8Yi5ib3VuZGFyeXx8Yi5zdW1tYXJ5KSYmYz09PSdwbHVzJykgew0KICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93LHRydWUpDQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYixhLHNob3csdHJ1ZSkNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYgKGIuc3VtbWFyeSYmIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZiAoYi5ib3VuZGFyeSYmIWMpIHsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCg0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGlmKG9iai5zdW1tYXJ5KXsNCiAgICAgICAgdmFyIHN1bW1hcnlzPU9iamVjdC5rZXlzKG9iai5zdW1tYXJ5KTsNCiAgICAgICAgaWYoKGNoZWNrSUQhPT1vYmomJihvYmoudG9ndHlwZT09PSdtaW51cyd8fCFvYmoudG9ndHlwZSkpfHxjaGVja0lEPT09b2JqKXsNCiAgICAgICAgICAgIGZvcih2YXIgaT0wO2k8c3VtbWFyeXMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9c3VtbWFyeXNbaV0uc2xpY2UoMSk7DQogICAgICAgICAgICAgICAgdmFyIGI9b2JqLnN1bW1hcnlbc3VtbWFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCi8vICAgICAgICAgICAgICAgIGlmKGMpew0KLy8gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciK2ErIiddIikuc3R5bGUuZGlzcGxheT1zaG93Ow0KLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCi8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCi8vICAgICAgICAgICAgICAgICAgICB9DQovLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQovLyAgICAgICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KLy8gICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3csdHJ1ZSkNCi8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyhiKS5sZW5ndGghPT0wKXsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZihvYmouYm91bmRhcnkpew0KICAgICAgICB2YXIgYm91bmRhcnlzPU9iamVjdC5rZXlzKG9iai5ib3VuZGFyeSk7DQogICAgICAgIGlmKGNoZWNrSUQhPT1vYmopew0KICAgICAgICAgICAgZm9yKHZhciBpPTA7aTxib3VuZGFyeXMubGVuZ3RoO2krKyl7DQogICAgICAgICAgICAgICAgdmFyIGE9Ym91bmRhcnlzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgICAgIHZhciBiPW9iai5ib3VuZGFyeVtib3VuZGFyeXNbaV1dOw0KICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGEpOw0KICAgICAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGEpLnN0eWxlLmRpc3BsYXk9c2hvdzsNCi8vICAgICAgICAgICAgICAgIGlmKGMpew0KLy8gICAgICAgICAgICAgICAgICAgIGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImdbZWRcXDp0b2d0b3BpY2lkPSciK2ErIiddIikuc3R5bGUuZGlzcGxheT1zaG93Ow0KLy8gICAgICAgICAgICAgICAgICAgIGlmKGM9PT0nbWludXMnKXsNCi8vICAgICAgICAgICAgICAgICAgICAgICAgdXRkKGIsc2hvdykNCi8vICAgICAgICAgICAgICAgICAgICB9DQovLyAgICAgICAgICAgICAgICAgICAgaWYgKGIuY2FsbCYmYz09PSdwbHVzJykgew0KLy8gICAgICAgICAgICAgICAgICAgICAgICB1dGQoYixzaG93LHRydWUpDQovLyAgICAgICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgfQ0KLy8gICAgICAgICAgICAgICAgaWYoYi5jYWxsJiYhYykgew0KLy8gICAgICAgICAgICAgICAgICAgIHV0ZChiLHNob3csdHJ1ZSkNCi8vICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihPYmplY3Qua2V5cyhiKS5sZW5ndGghPT0wKXsNCiAgICAgICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93KQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBpZighb2MmJm9iai5jaGlsZCkgew0KICAgICAgICB2YXIgY2hpbGRzID0gT2JqZWN0LmtleXMob2JqLmNoaWxkKTsNCiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjaGlsZHMubGVuZ3RoOyBpKyspIHsNCiAgICAgICAgICAgIHZhciBhID0gY2hpbGRzW2ldLnNsaWNlKDEpOw0KICAgICAgICAgICAgdmFyIGIgPSBvYmouY2hpbGRbY2hpbGRzW2ldXTsNCiAgICAgICAgICAgIHZhciBjID0gYi50b2d0eXBlOw0KICAgICAgICAgICAgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYSkuc3R5bGUuZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICBpZiAoYi5yZWxhZnJvbSYmIWMpew0KICAgICAgICAgICAgICAgIGlmKGIucmVsYWZyb20uZGlzcGxheSE9PSBzaG93KXsNCiAgICAgICAgICAgICAgICAgICAgdmFyIHJlbGFmcm9tcz1PYmplY3Qua2V5cyhiLnJlbGFmcm9tKTsNCiAgICAgICAgICAgICAgICAgICAgcmVsYWZyb21zLnNwbGljZShyZWxhZnJvbXMuaW5kZXhPZignZGlzcGxheScpLDEpOw0KICAgICAgICAgICAgICAgICAgICBmb3IodmFyIGs9MDtrPHJlbGFmcm9tcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGFmcm9tc1trXTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhUmVsYVtkXS5pc0M9dHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBiLnJlbGFmcm9tLmRpc3BsYXkgPSBzaG93Ow0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLnJlbGF0byYmIWMpew0KICAgICAgICAgICAgICAgIGlmKGIucmVsYXRvLmRpc3BsYXkhPT0gc2hvdyl7DQogICAgICAgICAgICAgICAgICAgIHZhciByZWxhdG9zPU9iamVjdC5rZXlzKGIucmVsYXRvKTsNCiAgICAgICAgICAgICAgICAgICAgcmVsYXRvcy5zcGxpY2UocmVsYXRvcy5pbmRleE9mKCdkaXNwbGF5JyksMSk7DQogICAgICAgICAgICAgICAgICAgIGZvcih2YXIgaz0wO2s8cmVsYXRvcy5sZW5ndGg7aysrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkPXJlbGF0b3Nba107DQogICAgICAgICAgICAgICAgICAgICAgICBleHRyYVJlbGFbZF0uaXNDPXRydWU7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgYi5yZWxhdG8uZGlzcGxheSA9IHNob3c7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYgKGMpIHsNCiAgICAgICAgICAgICAgICBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJnW2VkXFw6dG9ndG9waWNpZD0nIiArIGEgKyAiJ10iKS5zdHlsZS5kaXNwbGF5ID0gc2hvdzsNCiAgICAgICAgICAgICAgICBpZiAoYyA9PT0gJ21pbnVzJykgew0KICAgICAgICAgICAgICAgICAgICB1dGQoYixhLHNob3cpDQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIGlmICgoYi5jYWxsfHxiLmJvdW5kYXJ5fHxiLnN1bW1hcnkpJiZjPT09J3BsdXMnKSB7DQogICAgICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdyx0cnVlKQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLmNhbGwmJiFjKSB7DQogICAgICAgICAgICAgICAgdXRkKGIsYSxzaG93LHRydWUpDQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiAoYi5zdW1tYXJ5JiYhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGlmIChiLmJvdW5kYXJ5JiYhYykgew0KICAgICAgICAgICAgICAgIHV0ZChiLGEsc2hvdykNCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCn0NCg0KZnVuY3Rpb24gZXh0cmFSZWxhRmluKCkgew0KICAgIHZhciBleHRyYWtleXM9T2JqZWN0LmtleXMoZXh0cmFSZWxhKTsNCiAgICBmb3IodmFyIGk9MDtpPGV4dHJha2V5cy5sZW5ndGg7aSsrKXsNCiAgICAgICAgdmFyIGV4dHJhT2JqPWV4dHJhUmVsYVtleHRyYWtleXNbaV1dOw0KICAgICAgICBpZihleHRyYU9iai5pc0MgPT09IHRydWUpew0KICAgICAgICAgICAgdmFyIGZzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmZyb21pZCkuc3R5bGUuZGlzcGxheSAhPT0nbm9uZSc/IHRydWU6IGZhbHNlOw0KICAgICAgICAgICAgdmFyIHRzaG93PWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLnRvaWQpLnN0eWxlLmRpc3BsYXkgIT09J25vbmUnPyB0cnVlOiBmYWxzZTsNCiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGV4dHJhT2JqLmlkKS5zdHlsZS5kaXNwbGF5PWZzaG93ICYmIHRzaG93PyAnYmxvY2snOiAnbm9uZSc7DQogICAgICAgICAgICBleHRyYVJlbGFbZXh0cmFrZXlzW2ldXS5pc0MgPSBmYWxzZTsNCiAgICAgICAgfQ0KICAgIH0NCn0='))</script>
  </body>
</html>
